SilverStripe:表单可以在主页面上工作,但不能在子页面上工作
我有以下表格代码:SilverStripe:表单可以在主页面上工作,但不能在子页面上工作,silverstripe,Silverstripe,我有以下表格代码: ContactPage_Controller extends Page_Controller { static $allowed_actions = array( 'submit' ); public function Send() { $contact = new Contact(); $validator = new RequiredFields('Anrede', 'Vorname', 'Na
ContactPage_Controller extends Page_Controller {
static $allowed_actions = array(
'submit'
);
public function Send() {
$contact = new Contact();
$validator = new RequiredFields('Anrede', 'Vorname', 'Nachname', 'Email', 'Message');
$fields = new FieldList(
new TextField('securityidentifier', 'securityidentifier', $this->cryptTime()),
new DropdownField('Anrede', 'Anrede:*', $contact->dbObject('Anrede')->enumValues()),
new TextField('Vorname', 'Vorname:*'),
new TextField('Nachname', 'Nachname:*'),
new EmailField('Email', 'E-Mail-Adresse:*'),
new TextareaField('Message', 'Nachricht:*')
);
$actions = new FieldList(
new FormAction('submit', 'Senden')
);
return new Form($this, 'submit', $fields, $actions, $validator);
}
// ...
}
如果我把它作为一个单独的页面使用,它就可以很好地工作。当我尝试将其用作子页面时,表单不会显示。我得到了标题,我得到了内容,但我没有得到表格
你知道这为什么不能正常工作吗 您的表单是在
ContactPage\u Controller
上定义的。如果您试图在其上呈现的子页面不是ContactPage
的后代,则该方法通过继承不可见。有几种选择
1) 将表单放入控制器的页面
。通常,您的所有页面都继承自该表单,因此它们可以访问该表单。不过,这不是很好的练习。尽量让你的页面类保持精简
2) 创建将表单工厂方法和处理程序注入控制器的扩展。这更多的是“水平”继承方法,而不是垂直继承方法,而且往往规模更大
3) 按照同样的思路,创造一种做同样事情的特质。可能是更好的选择,因为扩展是特殊的,可能会在某个时候被弃用。您的表单是在ContactPage\u Controller
上定义的。如果您试图在其上呈现的子页面不是ContactPage
的后代,则该方法通过继承不可见。有几种选择
1) 将表单放入控制器的页面
。通常,您的所有页面都继承自该表单,因此它们可以访问该表单。不过,这不是很好的练习。尽量让你的页面类保持精简
2) 创建将表单工厂方法和处理程序注入控制器的扩展。这更多的是“水平”继承方法,而不是垂直继承方法,而且往往规模更大
3) 按照同样的思路,创造一种做同样事情的特质。可能是更好的选择,因为扩展是特殊的,在某些时候可能会被弃用。子页面是什么意思?子页面也是联系人页面吗?@bummzack,子页面我指的是childpage。@wmk是。这正是让我困惑的地方。你确定你对允许的孩子没有任何限制吗private static$allowed_children
将允许一系列允许的子类型,因此您可能无法将ContactPage类型作为要在其下创建ContactPage的页面的子类型?如果是这种情况,子页面将默认为普通页面类型,最简单的方法是查看您希望成为联系人页面的页面的“设置”选项卡,从下拉列表中查看其类型“子页面”是什么意思?子页面也是联系人页面吗?@bummzack,其中子页面我指的是childpage。@wmk是。这正是让我困惑的地方。你确定你对允许的孩子没有任何限制吗private static$allowed_children
将允许一系列允许的子类型,因此您可能无法将ContactPage类型作为要在其下创建ContactPage的页面的子类型?如果是这种情况,子页面将默认为普通页面类型,最简单的方法是查看您希望成为联系人页面的页面的设置选项卡,从下拉列表中查看其类型