如何从控制器访问模型类?

时间:2015-08-17 09:30:20

标签: cakephp

CakePHP 2.x

AppController里面的2行代替其他人的代码我试图理解:

 // set the Session data as static values, in the model
    if(isset($this->{$this->modelClass}) && method_exists($this->{$this->modelClass}, 'setSessionInfo'))
                $this->{$this->modelClass}->setSessionInfo($this->Session->read());

$ this-> {$ this-> modelClass}会返回什么?显然它指的是AppModel类,但属性modelClass没有在AppController或整个应用程序中的任何位置设置。符号' $ this-> modelClass'几乎在应用程序的每个控制器中使用。鉴于modelClass不是CakePHP保留变量的一部分,代码如何工作?

感谢。

1 个答案:

答案 0 :(得分:3)

参考来源

modelClass是标准控制器类属性,set automatically based on the controller class name。在内部,它用于了解类加载的default model name

在app控制器中引用modelClass是一种相对常见的技术,允许继承的代码知道并使用给定控制器的主模型名称。因此在app控制器中这样的代码:

$this->{$this->modelClass}->

当用户控制器执行时会被解释为:

$this->User->

或者是产品控制器:

$this->Product->

  几乎在应用程序的每个控制器中都使用

$this->modelClass

因为对于给定的控制器,要引用的modelClass不会改变。使用class属性而不是模型名称只会增加一些间接性 - 可能是为了在特定控制器中删除此用法。