CakePHP控制器交互问题

时间:2010-01-11 01:18:16

标签: php cakephp

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

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

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

2。)App ::导入作业连接器。 $ Jobs =新的JobsConnector。 $ Jobs->的getArray($用户[ '作业ID']); 每次我尝试这样做,我都会得到未定义的错误。 JobConnector :: Job不存在。 然后我在find()方法上得到一个错误,否则它会起作用。

我花了好几个小时试图弄清楚这两种方法,并一直把我的头发拉出来。我很快就会回到自己的个人课堂互动中,因为这些课堂互动有多少是PitA。

有人,请帮忙!

4 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

结帐the associations documentation。那里有一些很好的例子。

答案 2 :(得分:0)

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

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

Google为“带有requestAction的可恢复元素”,您将获得一篇关于如何让您的元素获取自己的数据并相应地缓存自己的数据的面包店文章。

Mark Story发布了关于性能问题的帖子,只要您不滥用它,并且您在逻辑上缓存,性能损失可以忽略不计。

答案 3 :(得分:0)

3 - loadModel

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

class FoosController extends AppController {

    function foo() {
        ...

        if (!isset($this->Job)) {
            $this->loadModel('Job');
        }
        $array = $this->Job->getArray();

        ...
    }