为什么在使用模型常量时找不到“AppModel”?

时间:2013-10-05 18:01:03

标签: php cakephp

这可能是一个愚蠢的问题,但我对CakePHP 2.3有一种奇怪的行为。

在我的模型中,我定义了一些常量:

class ImageSpecification extends AppModel {
  public $name = 'ImageSpecification';

  const THUMBNAIL = 1;
  const NORMAL = 2;
  const HIDEF = 3;
  const EXTRA = 4;
  [...]
}

ImagesController中,我执行了App:uses('ImageSpecification', 'Model'),我可以在使用ImageSpecification后成功加载$this->loadModel('ImageSpecification')个数据。但是,一旦我使用常量(即:ImageSpecification::THUMBNAIL),它就会失败并且我有错误:

  

致命错误:第2行的../app/Model/ImageSpecification.php中找不到“AppModel”类

AppModel.php位于/app/Model目录中。在不更改任何代码的情况下,其他模型工作正常,如果我直接使用常量值而不是使用常量,ImageSpecification / ImagesController一切都很好。那么,这里的问题是什么? PHP中的语言或语法错误?

2 个答案:

答案 0 :(得分:0)

这是因为您的模型设置不正确。 您缺少一些重要的App :: uses()调用。 在您的情况下,可能在顶部的模型类中:

App::uses('AppModel', 'Model');

class ImageSpecification extends AppModel {...}

您需要始终在顶部的文件中包含所有使用的类。 不这样做会让你陷入困境 - 正如你刚刚体验过的那样。

对于您的控制器也是如此,如果您想要在尚未加载模型的情况下访问模型常量。 那么你需要在控制器的顶部,当然:

App:uses('ImageSpecification', 'Model')

然后你就可以毫无问题地访问常量了(你不必为它加载或初始化类)。

答案 1 :(得分:-1)

A)您可以改为使用对象实例,而不是类

B)您可以使用App::import来加载类而不是它的实例。