好的,这可能看起来有点令人费解,所以我会尽我所能:
我有一个新的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上会更容易,但我宁愿保留所有这些代码。
答案 0 :(得分:2)
尝试将formAction设置为始终使用/ home / myform,例如commands.CreateCommand("highscores + Input")
.Do(async (e) =>
{
await
e.Channel.SendMessage("https://www.example.org/highscores/user/Inputgoeshere");
那是在返回表格之前。然后它应该始终使用该URL,无论您在哪个页面上。