CakePHP $ this-> element правильное использование? - PullRequest
1 голос
/ 10 сентября 2011

Я пытаюсь создать компонент многократного использования (выпадающий список дня недели, простой как круговой) и следую совету в http://book.cakephp.org/view/1081/Elements.

Согласно этой странице, я должен создать файл blah.ctp в app / views / elements, и он будет магически доступен в моем коде представления как $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 голосов
/ 16 сентября 2013

Элемент слишком прост, я ожидаю. Также это не очень тестируемо. Сосредоточился бы на Помощниках, которые являются более продвинутым способом развития этого. Но есть и другое решение, которое я бы предпочел еще:

Для такого рода вопросов может быть более целесообразно расширить сам помощник по формам. Вы можете увидеть простой пример здесь:

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

0 голосов
/ 10 сентября 2011

Вам не нужно передавать объект Form. Форма, HTML и другие помощники доступны в элементах (так же, как в представлении). От того, хотите ли вы передать имя поля, зависит: вам нужно его изменить?

...