2011-09-10 46 views
1

我試圖做一個可重用的組件(一個工作日下拉框,簡單如餡餅),並遵循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

您不必傳遞Form對象。表單,Html和其他助手可用於元素(就像在視圖中一樣)。你是否想傳遞fieldname取決於:你需要改變它嗎?

0

一個元素有點太簡單,我期望。它也不是很可測試的。關注助手,這是一種更高級的開發方式。但還有另外一種解決方案我更願意:

對於這類問題,擴展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