我有一个注册表单发布到我的customers_controller,但现在他们希望注册表单也可以获取付款信息。我有一个payment_controller,保存新用户后,我想将付款发布数据转发到payment_controller中的操作。
我该怎么做?
答案 0 :(得分:4)
我建议您将付款的实际逻辑放入付款或发票模型中。这样做,您可以链接两个模型(允许您进行$ this-> Customer-> Payment-> process_charge(..)调用),或者您可以在Customers控制器中定义$ uses属性允许拨打付款模式。
我也是“肥胖模特,瘦弱的控制者”思想学派的支持者,部分原因在于这种情况。我试着将控制器视为负责实际的http请求(访问控制,工作流属性等)并让模型完成大部分繁重工作。
答案 1 :(得分:1)
我建议在用户控制器的注册操作中,当用户注册(并登录)时,您将重定向到使用正常支付模式的支付控制器,并在那里查看自己的帖子。通过重定向从一个动作结束到另一个动作的通信方式是构建URL。但是,您不需要传递用户信息,因为Payments控制器应该能够在需要时获取用户的ID,即:
$this->data['Payment']['user_id'] = $this->Auth->user('id');
$this->Payment->create($this->data);
if ($this->Payment->save()) {
// etc
答案 2 :(得分:0)
假设客户和付款以某种方式相关,您无法在cusomters_controller中记录付款信息。
$this->Customer->Payment->create()...
没有规则说你必须为每个型号使用一个控制器。事实上,这对你现在正在经历的绝大多数真实世界的应用程序都不起作用。
我通常通过逻辑功能分组来隔离我的控制器,而不是试图将它们与模型配对。在您的情况下,我将构建一个accounts_controller(即使我没有帐户表)并在该控制器中进行登录,注册,注销,配置文件编辑等。
我发现这种组织使应用程序更易于维护,并为最终用户提供了更多的逻辑路径。
答案 3 :(得分:0)
最终我认为尝试将数据移动到另一个控制器是愚蠢的。我创建了一个处理来自任何控制器的请求的支付组件。