Могу ли я использовать один и тот же вид для другого действия? - PullRequest
2 голосов
/ 24 января 2011

У меня есть контроллер, 'products', с действиями 'add' и 'edit'.

Я сделал представление add.ctp, которое имеет длинную форму. Интересно, могу ли я использовать тот же самый вид для генерации отображения 'edit'. Что бы мне нужно было поместить в контроллер под edit () {}, чтобы он выводился в 'add.ctp' вместо 'edit.ctp'?

Спасибо.

Ответы [ 4 ]

6 голосов
/ 24 января 2011

Вы можете использовать:

$this->render('add');

в конце функции редактирования вашего контроллера, но я бы не рекомендовал это.

Лучшим решением было бы сделать небольшой рефакторинг, чтобы поместить содержимое вашего add.ctp в элемент (например, app / views / elements / productForm.ctp), а затем использовать этот элемент из обоих add.ctp и Просмотры edit.ctp.

<?php echo $this->element('productForm'); ?>

Это дает вам гибкость, чтобы обернуть форму элементами, относящимися к действию, и выполнить любые настройки, которые могут относиться к этому действию. Например, в форме продукта у вас может быть другой набор действий, например «Просмотр продукта», который не имеет смысла в режиме добавления, но имеет смысл в режиме редактирования.

@ kaklon высказал очень хорошую мысль, вы должны добавить немного логики в элемент productForm, чтобы убедиться, что режим редактирования работает правильно:

if ($this->action == 'edit') {
    echo $this->Form->input('id');
}
2 голосов
/ 24 января 2011

Псевдокодер написал очень хорошую статью по этому поводу: http://www.pseudocoder.com/archives/category/cakephp/page:4

С тех пор он еще больше улучшил это, используя маршруты, чтобы полностью исключить действие добавления.Вы можете быть заинтересованы в его сборке советов и хаков CakePHP: http://www.pseudocoder.com/free-cakephp-book/

1 голос
/ 24 января 2011

да, вы можете, это один из способов сделать это ... https://github.com/infinitas/infinitas/blob/dev/app_controller.php#L374

, который позволяет вам использовать один файл, когда доступен только один, или добавлять / редактировать, когда вам нужны разные вещи

0 голосов
/ 25 января 2011

Вы ищете элементов .Представление не является идентичным на 100%, потому что форма редактирования должна содержать идентификатор продукта, который вы хотите редактировать, а форма добавления не имеет идентификатора.

...