OK所以這似乎有點令人費解,所以我會盡我所能:控制器擴展與SilverStripe 3表單自定義控制器不處理
- 我有一個自定義路由自定義控制器將對象作爲頁面顯示數據 。 TourController擴展Page_Controller。對於這個 的例子,說這個頁面的路由是 /tours/south-america/patagonia/tour-name /。這工作正常。
- 我有其他正常整個頁面通過 CMS
加入,我有一個新的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(); } }
在所有頁面,包括定製的控制器,形式呈現就好了。當我提出我遇到問題時。在普通頁面上,一切都很好,setCurrency操作也會觸發。例如。表單被提交給/ home/CurrencyForm。然而,在自定義控制器上,表單被提交給/ TourController/CurrencyForm,並出現404錯誤。
我已經搜索並找到了幾個suggestions圍繞在自定義控制器上創建Link()方法,並且我成功地做到了這一點。但是404問題仍然存在。
任何想法我可以做到這一點。我有一半認爲將操作直接放在Page_Controller上更容易,但我寧願保留所有這些代碼封裝。
好主意!該方法是行動setFormAction,所以謝謝! $形式 - > setFormAction( '/家庭/ CurrencyForm'); – Aaryn