带有SilverStripe 3表单的Controller Extension不会在自定义控制器

时间:2017-05-21 06:31:30

标签: silverstripe

好的,这可能看起来有点令人费解,所以我会尽我所能:

  1. 我有一个自定义控制器,其中包含显示数据的自定义路径 对象作为页面。 TourController扩展了Page_Controller。为了这 例如,说这个页面的溃败是 /旅游/南美洲/巴塔哥尼亚/旅游名/。这很好用。
  2. 我在整个网站上都有其他正常页面通过 CMS
  3. 我有一个新的DataExtension,只需向所有人添加一个表单 Page_Controller对象。代码如下。

    class CurrencyPageExtension extends DataExtension {
    private static $allowed_actions = array(
        'CurrencyForm',
        'setCurrency'
    );
    
    public function CurrencyForm() {
    
        $currencies = [
            'NZD',
            'AUD',
            'USD',
            'GBP',
            'EUR'
        ];
    
        $currentCurrency = 'NZ';
    
        $currencyField = DropdownField::create('Currency', ' ', $currencies, $currentCurrency);
        $currencyField->addExtraClass('form-control');
        $currencyField->setAttribute('onchange', 'this.form.submit()');
    
        $fields = FieldList::create(
            $currencyField
        );
    
        $actions = FieldList::create(
            FormAction::create('setCurrency', 'Save')
        );
    
        $form = new Form(
            $this->owner,
            'CurrencyForm',
            $fields,
            $actions
        );
    
        return $form;
    
    }
    
    public function setCurrency($data, $form) {
        // Set currency stuff
        $this->owner->redirectBack();
    }
    
    }
    
  4. 在所有页面中,包括自定义控制器,表单都可以正常呈现。当我提交时,我得到了这个问题。在普通页面上,一切都很好,并且setCurrency动作会触发。例如。表单提交到/ home / CurrencyForm。但是,在自定义控制器上,表单将被提交到/ TourController / CurrencyForm,并出现404错误。

    我搜索并发现了几个suggestions围绕自定义控制器创建Link()方法,我成功地做到了。然而404问题仍然存在。

    知道如何做到这一点。我一半认为将动作直接放在Page_Controller上会更容易,但我宁愿保留所有这些代码。

1 个答案:

答案 0 :(得分:2)

尝试将formAction设置为始终使用/ home / myform,例如commands.CreateCommand("highscores + Input") .Do(async (e) => { await e.Channel.SendMessage("https://www.example.org/highscores/user/Inputgoeshere");

那是在返回表格之前。然后它应该始终使用该URL,无论您在哪个页面上。