【问题标题】:Why 'AppModel' is not found when using model constants?为什么使用模型常量时找不到“AppModel”?
【发布时间】:2013-10-05 18:01:02
【问题描述】:

这可能是一个愚蠢的问题,但我对 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'),我可以在使用$this->loadModel('ImageSpecification')之后成功加载ImageSpecification数据。但是,一旦我使用一个常量(即:ImageSpecification::THUMBNAIL),它就会失败并且我有错误:

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

AppModel.php 位于/app/Model 目录中。无需更改任何代码,其他模型就可以正常工作,如果我直接使用常量值而不是使用常量,那么ImageSpecification / ImagesController 也可以。那么,这里有什么问题呢? PHP 中的语言或语法错误?

【问题讨论】:

  • 那么您究竟在哪里访问这些常量?拨打Controller::loadModel()之后?还是您在谈论两种不同的情况? ps,请务必提及您的确切 CakePHP 版本!

标签: php cakephp


【解决方案1】:

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

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

class ImageSpecification extends AppModel {...}

您需要始终在顶部的文件中包含所有使用的类。 不这样做会给你带来麻烦——就像你刚刚经历的那样。

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

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

然后您将能够毫无问题地访问常量(您不必为它加载或初始化类)。

【讨论】:

    【解决方案2】:

    A) 你可以只使用对象实例,而不是类

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

    【讨论】:

      猜你喜欢
      • 2022-11-10
      • 2020-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多