2009-05-27 1 views
1

У меня есть регистрация формы регистрации для моих клиентов_controller, но теперь они хотят, чтобы форма регистрации принимала и платежную информацию. У меня есть платежный контроллер. После сохранения нового пользователя я хотел бы переслать данные платежного сообщения в действие в платежном_контроллере.cakephp - как я могу перенаправить данные в контроллер на другой контроллер?

Как это сделать?

ответ

0

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

4

Я бы рекомендовал вам поместить фактическую логику платежа в модель оплаты или счетов-фактур. При этом вы можете связать две модели (позволяя вам выполнить вызов $ this-> Customer-> Payment-> process_charge (..)), или вы можете определить атрибут $ uses в контроллере Customers, чтобы разрешить модель оплаты.

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

1

Я предлагаю, чтобы в действии регистрации в пользовательском контроллере, когда пользователь зарегистрирован (и вошел в систему), вы перенаправляетесь на контроллер платежей, где используете обычную модель оплаты и просматриваете ее. Способ общения от конца одного действия к другому посредством перенаправления будет заключаться в создании URL-адреса. Вам не нужно, чтобы передать информацию о пользователе, однако, так как контроллер Платежи должны быть в состоянии захватить идентификатор пользователя, когда это необходимо, а именно:

$this->data['Payment']['user_id'] = $this->Auth->user('id'); 
$this->Payment->create($this->data); 
if ($this->Payment->save()) { 
// etc 
0

Если предположить, что клиенты и платежи связаны каким-либо образом, нет никаких причин, вы не удалось записать информацию о платежах в ваш cusomters_controller.

$this->Customer->Payment->create()... 

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

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

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

Смежные вопросы