我正在尝试创建一个可重用的组件(工作日下拉框,简单的馅饼),并遵循http://book.cakephp.org/view/1081/Elements中的建议。
根据该页面,我应该在app / views / elements中创建一个blah.ctp文件,它将在我的视图代码中以$this->element('blah')
神奇地访问。
所以我做到了。我将表单和字段名称传递给视图代码中的元素:
$this->element(
'weekday_input',
array('form'=>$this->Form, 'fieldname'=>'weekday')
);
之前我使用$this->Form->create
创建了一个表单,所以我想我需要明确地将它传递给元素。
我的元素代码,在weekday_input.ctp:
echo $form->input(
$fieldname,
array(
'options',
array('Sunday'=>'Sunday',...,'Saturday'=>'Saturday')
)
);
(为简洁起见省略了工作日。)
我正确使用$this->element
吗?有没有更清洁的东西?
答案 0 :(得分:0)
您不必传递Form对象。 Form,Html和其他帮助程序在元素中可用(就像在视图中一样)。是否要传递fieldname取决于:您需要更改吗?
答案 1 :(得分:0)
我期望一个元素有点过于简单。它也不是很可测试的。将重点放在Helpers上,这是一种更先进的方法。但还有另一种我更喜欢的解决方案:
对于这类问题,扩展formhelper本身可能更合适。你可以在这里看到一个简单的例子:
http://blog.nlware.com/2012/02/07/cakephp-2-0-how-to-extend-the-formhelper/
例如,可以找到一个完整的例子:
当你要求一个干净的解决方案考虑创建一个插件(或检查现有的插件)。这将使您的项目中的代码更加干净。它可以重复使用,没有太多问题。
您可以在同一个项目中找到插件所需的所有文件: https://github.com/slywalker/cakephp-plugin-boost_cake