我试图在我所有的表单添加一个隐藏的输入作为$form->create()函数的一部分(有点像rails的做法),所以我可以添加一个自定义的csrf令牌
我是否可以重写helper以在它之后添加输入?
最简单的方法就是添加cake提供的安全组件。
通过使用安全组件,您可以自动获得CSRF和表单篡改保护。隐藏的令牌字段将自动插入表单,并由Security组件进行检查。
你不应该这样做,即在你问问题的方式(form->create)。创建一个帮助器并使用它,如果您想知道将值放在哪里,还可以将CSRF存储在用户会话中。
在CakePHP 2.x中通过别名重写核心助手
在CakePHP 2。X可以通过为自己的帮助器使用"别名"来覆盖默认帮助器。这将允许您创建一个'插入'替代内置的CakePHP帮助程序,而无需更改其余代码。
例如:app/控制器/AppController.php
class AppController extends Controller {
public $helpers = array(
'Form' => array(
'className' => 'FancyFormHelper'
)
);
}
应用程序/视图/帮助/FancyFormHelper.php
App::uses('FormHelper', 'View/Helper');
class FancyFormHelper extends FormHelper {
public function create($model = null, $options = array())
{
$output = parent::create($model, $options);
// append your hidden fields
return $output . $this->createCSRFfield(); // Or whatever you name your method
}
}
文档:使用和配置helper