代码之家  ›  专栏  ›  技术社区  ›  Jack B Nimble

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

  •  1
  • Jack B Nimble  · 技术社区  · 17 年前

    我有一个登记表张贴到我的客户的控制器,但现在他们也希望登记表采取付款信息。我有一个支付控制器,在保存新用户之后,我想将支付公告数据转发到支付控制器中的操作。

    我该怎么做?

    4 回复  |  直到 17 年前
        1
  •  4
  •   Travis Leleu    17 年前

    我建议您将付款的实际逻辑放入付款或发票模型中。这样,您可以链接这两个模型(允许您进行$this->客户->付款->处理费用(..)调用),也可以在客户控制器中定义$uses属性以允许调用付款模型。

    我也是“胖模特,瘦管家”思想流派的支持者,部分原因是这种情况。我试着把控制器看作是负责实际的HTTP请求(访问控制、工作流属性等),并让模型完成大部分繁重的工作。

        2
  •  1
  •   Alexander Morland    17 年前

    我建议在用户控制器中的注册操作中,当用户注册(并登录)时,您重定向到使用正常付款模式的付款控制器,并查看该自发布。通过重定向从一个操作的末尾到另一个操作的通信方式是构建URL。但是,您不需要传递用户信息,因为付款管理员应该能够在需要时获取用户的ID,即:

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

    假设客户和付款在某种程度上是相关的,那么您没有理由不能在您的客户控制器中记录付款信息。

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

    没有规则规定每个模型必须使用一个控制器。事实上,在像您现在所体验的大多数现实世界应用程序中,这是行不通的。

    我通常通过逻辑功能分组来隔离控制器,而不是尝试将它们与模型配对。在您的情况下,我将构建一个帐户控制器(即使我没有帐户表),并将登录、注册、注销、配置文件编辑等放在该控制器中。

    我发现这种类型的组织使应用程序更容易维护,也为最终用户提供了更合理的路径。

        4
  •  0
  •   Jack B Nimble    16 年前

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