CakePHP $ this->元素正确用法?

时间:2011-09-10 03:54:45

标签: cakephp cakephp-1.3

我正在尝试创建一个可重用的组件(工作日下拉框,简单的馅饼),并遵循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吗?有没有更清洁的东西?

2 个答案:

答案 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/blob/master/View/Helper/BoostCakeFormHelper.php

当你要求一个干净的解决方案考虑创建一个插件(或检查现有的插件)。这将使您的项目中的代码更加干净。它可以重复使用,没有太多问题。

您可以在同一个项目中找到插件所需的所有文件: https://github.com/slywalker/cakephp-plugin-boost_cake

这里的文档: http://book.cakephp.org/2.0/en/plugins.html