在 CakePHP 2.2 应用程序中,我在模型中使用类常量进行一些内部配置。出现了以下问题。
简洁版本:
Cake 的延迟类加载不会由对 Model 类的静态调用触发。
如果第一次访问控制器中的模型是
MyModel::SOME_CONST // fails
班级将是未知的。如果之前使用过该类的任何实例,那很好:
$this->MyModel->something();
MyModel::SOME_CONST // works
不知道延迟加载实现的细节:
问题:这是无法解决的问题吗?如果是这样,为什么?那么我如何最好地在我的应用程序中解决它(将 const 包装在一个函数中)?或者是否有机会改进延迟加载,使其也适用于静态访问?
带有代码的长版本:
为了测试不同的情况,我制作了一个带有 1 个模型和 1 个控制器的小型测试 App:
模型/Post.php:<?php
class Post extends AppModel {
public $useTable = false; // Don't bother with a DB
const FOO = "foo";
public $bar = "bar";
}
控制器/PostsController.php:
<?php
class PostsController extends AppController {
public function constant() {
debug(Post::FOO);
}
public function variable() {
debug($this->Post->bar);
}
public function variableFirst() {
debug($this->Post->bar);
debug(Post::FOO);
}
}
通过浏览器访问三个控制器动作,现在可以测试不同的情况。
1)访问模型常量(at/posts/constant
):
2)访问模型变量(at错误:找不到类“AppModel”
/posts/variable
):
3)在变量(at)之后访问模型常量'酒吧'
/posts/variable
:
'酒吧'
“富”