我正在尝试将CakePHP应用程序从1.3.6
升级到2.2.4
我根据官方CakePHP升级文档完成了所有升级步骤。
但我正在努力解决这个错误:
未找到“内容”类 C:\瓦帕\ WWW \ cakephp的-2.2.4 \应用\控制器\元器件\ OrderBaseComponent.php 第20行
传递给Component :: __ construct()的参数1必须是。的实例 ComponentCollection,没有给出,调用 C:\瓦帕\ WWW \ cakephp的-2.2.4 \应用\控制器\元器件\ OrderBaseComponent.php 在第17行并定义[CORE \ Cake \ Controller \ Component.php,第77行]
答案 0 :(得分:0)
对于第一个错误,请确保始终 App :: uses()您在代码中使用的每个类。 因此,在您实际使用它之前,还必须包含您的内容(无论是什么类)。
只有它是一个模型你才可以使用ClassRegistry::init()
,否则就像
App::uses('Content', '[TYPE]');
位于文件顶部。
这第二个错误非常明显! 查看概述的“CORE \ Cake \ Controller \ Component.php”文件,确保您的函数在自定义组件中具有完全相同的参数:
public function __construct(ComponentCollection $collection, $settings = array()) {
//...
}
答案 1 :(得分:-1)
我们没有任何相关的源代码,但通常您可以在顶部或组件文件中添加它:
<强>首先强>
App::uses('Content', 'Model');
您可能需要添加类似init或构造方法的内容:
$this->Content = ClassRegistry::init('Content');
这应解决第一个问题或明确解释出现了什么问题。实际上这段代码可能已经没有正确的独立功能。
我怀疑它取决于要在另一段代码中加载的模型,这就是为什么它可能起作用的原因。组件应该不依赖于其他代码片段,因此添加App :: uses,App :: import etc语句会使代码始终工作。例如,当您在其他项目中重复使用它时。
<强>第二强>
第二个问题来自于迁移问题。检查模型是否首先扩展Component类。
然后确保如果您实现自定义方法__construct()以及init(),例如您检查是否应该向父级添加调用。例如,这适用于beforeFilter控制器方法。
public function beforeFilter() {
parent::beforeFilter();
}
来自http://book.cakephp.org/2.0/en/controllers.html#the-app-controller
的文档和代码示例相关文件:http://book.cakephp.org/2.0/en/appendices/2-0-migration-guide.html#components