【问题标题】:CakePHP Controller interaction questionCakePHP Controller 交互问题
【发布时间】:2013-12-16 22:02:34
【问题描述】:

我有两个独立的控制器、视图、数据库组合:用户和作业。 用户包含:id、name、jobid。 Jobs 包含:id、name、工资。

在我的用户容器中,我想检索我的工作名称和工资以发送到用户视图。我想知道这里的最佳做法是什么。我试过两种方法:

1.) $this->requestAction('/Jobs/getArray', array('pass' => user['jobid'])); 我听说这不是最佳实践,特别是如果控制器之间有很多交互,我可能会这样做。尝试以这种方式进行所有发送和接收也是一种痛苦。

2.) App::import 作业连接器。 $Jobs = 新的 JobsConnector。 $Jobs->getArray($user['jobid']); 每当我尝试这样做时,都会收到未定义的错误。 JobConnector::Job 不存在。 然后我在 find() 方法上得到一个错误,否则它正在工作。

我花了好几个小时试图找出这两种方法,并且一直在拔头发。我正处于回到我自己的个人课堂互动的边缘,因为这些课堂互动是多少 PitA。

有人,请帮忙!

【问题讨论】:

    标签: php cakephp


    【解决方案1】:

    您是否尝试过使用表关系而不是请求操作来执行此操作?这样,您就可以在整个应用中从引用模型中的一个模型获取相关数据。

    【讨论】:

      【解决方案2】:

      假设您有充分的理由在您的两个模型之间没有关联,我会回答。如果有理由将它们关联起来,那么之前的一些答案确实是正确的。

      如果您没有有效的关系并且不想以任何方式加入您的模型,那么通过 requestAction 获取是绝对正确的解决方案。

      Google 搜索“Resuable elements with requestAction”,您将获得一篇关于如何让您的元素获取自己的数据并相应地缓存自己的数据的面包店文章。

      Mark Story 曾就性能问题发表过一篇文章,只要您不滥用它,并且在逻辑上进行缓存,性能损失可以忽略不计。

      【讨论】:

        【解决方案3】:

        3 - 加载模型

        如果模型尚未在控制器中使用 - loadModel 可用于使其可用:

        class FoosController extends AppController {
        
            function foo() {
                ...
        
                if (!isset($this->Job)) {
                    $this->loadModel('Job');
                }
                $array = $this->Job->getArray();
        
                ...
            }
        

        【讨论】:

          【解决方案4】:

          为了扩展 Selino 所说的内容,您是否配置了关联?也许User$hasOne = array( 'Job' )?如果是这样,那么在您的UsersController 中,您可以以$this->User->Job->find( ... ) 的身份访问Job 模型。

          查看the associations documentation。里面有一些很好的例子。

          【讨论】:

          • 是的,看起来您应该将模型关联在一起。但是(这只是一个偏好),我会将关系定义为 Jobs belongsTo User,这意味着在您的工作表中有一个 user_id 列。对我来说似乎更具语义。除非您的数据模型在概念上建立在作为主要单元的 Job 之上;通常我认为用户是主要的构建块。
          猜你喜欢
          • 2011-11-11
          • 2017-11-06
          • 1970-01-01
          • 1970-01-01
          • 2018-10-01
          • 2017-08-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多