cakephp - 如何将控制器中的数据转发到另一个控制器?

时间:2009-05-27 22:00:45

标签: cakephp

我有一个注册表单发布到我的customers_controller,但现在他们希望注册表单也可以获取付款信息​​。我有一个payment_controller,保存新用户后,我想将付款发布数据转发到payment_controller中的操作。

我该怎么做?

4 个答案:

答案 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)

最终我认为尝试将数据移动到另一个控制器是愚蠢的。我创建了一个处理来自任何控制器的请求的支付组件。