我有一个名为ForgotPasswordPage.php的自定义页面和一个ForgotPasswordPage.ss模板.我还在ForgotPasswordForm.php中有一个自定义Form类,它在templates / Includes目录中有相应的自定义Form模板ForgotPasswordForm.ss.
表单操作应该调用doForgotPassword,但是从不调用此函数,否则,我将被发送到google.com.
这似乎是如此基本,但我有两个开发人员在看它,我们得到的是以下错误:
表单操作应该调用doForgotPassword,但是从不调用此函数,否则,我将被发送到google.com.
这似乎是如此基本,但我有两个开发人员在看它,我们得到的是以下错误:
似乎存在技术问题.请单击后退按钮,刷新浏览器,然后重试.
我在这做错了什么?
ForgotPasswordForm.php
<?php class ForgotPasswordForm extends Form { function __construct($controller,$name,$arguments=array()) { $fields = new FieldList( EmailField::create("Email") ); $actions = new FieldList(FormAction::create("doForgotPassword")->setTitle("RETRIEVE PASSWORD")); $validator = new RequiredFields('Email'); parent::__construct($controller,$fields,$actions,$validator); } public function doForgotPassword($data,Form $form) { //As a test,if we ever get here,the controller should send me to the Google website Controller::curr()->redirect('http://www.google.com'); } public function forTemplate() { return $this->renderWith(array( $this->class,'Form' )); } }
ForgotPasswordForm.ss
<form $FormAttributes> <label for="{$FormName}_Email">Enter Your Email Address</label> $Fields.dataFieldByName(Email) <% if $Actions %> <% loop $Actions %> $Field <% end_loop %> <% end_if %> </form>
ForgotPasswordPage.php
class ForgotPasswordPage extends Page { . . . } class ForgotPasswordPage_Controller extends Page_Controller { public static $allowed_actions = array ( 'MyForgotPasswordForm' ); public function init() { parent::init(); } public function MyForgotPasswordForm(){ return new ForgotPasswordForm($this,'MyForgotPasswordForm'); } }
ForgotPasswordPage.ss
. . . $MyForgotPasswordForm . . .
为了保护表单免受xsrf攻击,silverstripe表单通常使用一个额外的隐藏字段构建,该字段填充有安全令牌,在提交时会对其进行检查.通过重写表单的模板文件,不再包含此标记.您可以通过在ForgotPasswordForm.ss中$Fields.dataFieldByName(Email)之后添加$Fields.dataFieldByName(SecurityID)来包含它.或者,您可以遍历字段,这是一个更强大的解决方案(这是Form.ss中的方法)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。