2011-09-10 5 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

要素があまりにも単純すぎると思っています。また、それは非常にテスト可能ではありません。これを開発するより高度な方法であるヘルパーに焦点を当てます。しかし、私がもっと好む別の解決策があります:

このような問題のためには、フォームヘルパー自体を拡張する方が適切かもしれません。あなたはここに簡単な例を見ることができます:

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

関連する問題