CakePHP: Как организовать повторяющиеся формы? - PullRequest
0 голосов
/ 04 марта 2012

У меня есть и форма добавления / редактирования, которая добавляет / редактирует в зависимости от того, передан ли идентификатор.

Эта модель доступна для трех разных типов пользователей в 3 совершенно разных ситуациях - разные контроллеры, разные меню, разные хлебные крошки, разные вещи.Тем не менее, форма та же, логика та же.

Так что, по сути, у меня есть 2 проблемы - повторение формы просмотра и повторение кода контроллера.

Я пытался поместить его в элемент, но затем я должен передать переменную для action формы, указывающей на разные контроллеры.И если я выполняю одно и то же действие и использую один и тот же контроллер, то у меня должен быть какой-то referer(), и почти невозможно передать все разные данные для хлебных крошек, меню, боковых панелей и т. Д. Я упускаю что-то важное при планированиииз.

Как мне организовать свой код с идеей иметь минимальный код и минимальные накладные расходы, поскольку мое приложение меняется с каждым днем, и я не хочу обновлять 3 места и забыть некоторые из них и т. Д.

1 Ответ

1 голос
/ 04 марта 2012

Вы можете повторно использовать логику контроллера, создав компонент (или поместив логику в AppController):

// controllers/first_controller.php
class FirstController extends AppController {

    public $components = array('MyForm');

    public function firstAction($id = null) {
        $this->MyForm->processForm(/* params */); // inserts reusable logic
        $this->redirect(array('action' => 'index'));
    }
}

(повторите для SecondController::secondAction() и ThirdController::thirdAction().)


Вы можете повторно использовать логику представления, создав элементы:

// views/first/first_action.ctp
$this->Html->addCrumb('First');
echo $this->Html->tag('h2', 'First');
$this->element('my_form', array(/* params */)); // inserts reusable logic

(Повторите для других представлений.)


Я пытался поставитьэто в элементе, но затем я должен передать переменную, чтобы действие формы указывало на разные контроллеры.

Вы можете получить доступ к $this->params изнутри элемента, избавляя вас от необходимостипередать тривиальные вещи, такие как текущее действие.

...