【问题标题】:cakephp model class not found error while upgrading升级时 cakephp 模型类未找到错误
【发布时间】:2013-01-13 09:50:45
【问题描述】:

我正在尝试将我的 CakePHP 应用程序从 1.3.6 升级到 2.2.4

我根据官方 CakePHP 升级文档完成了所有升级步骤。

但我正在努力解决这个错误:

在中找不到类“内容” C:\wamp\www\cakephp-2.2.4\app\Controller\Component\OrderBaseComponent.php 在第 20 行

传递给 Component::__construct() 的参数 1 必须是 ComponentCollection,没有给出,调用 C:\wamp\www\cakephp-2.2.4\app\Controller\Component\OrderBaseComponent.php 在第 17 行并定义了 [CORE\Cake\Controller\Component.php,第 77 行]

【问题讨论】:

标签: php cakephp upgrade


【解决方案1】:

对于第一个错误,请确保您始终 App::uses() 您在代码中使用的每个类。 因此,您的 Content(无论它是什么类)也必须包含在内,然后才能实际使用它。

只有模型才可以使用ClassRegistry::init(),否则的话 App::uses('Content', '[TYPE]'); 在文件顶部。

第二个错误是不言自明的! 查看概述的“CORE\Cake\Controller\Component.php”文件并确保您的函数在您的自定义组件中确实具有完全相同的参数:

public function __construct(ComponentCollection $collection, $settings = array()) {
    //...
}

【讨论】:

    【解决方案2】:

    我们没有任何相关的源代码,但通常您可以将其添加到顶部或组件文件中:

    第一:

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

    您可能需要在 init 或构造方法中添加类似的内容:

    $this->Content = ClassRegistry::init('Content');
    

    这应该可以解决第一个问题,或者清楚地解释哪里出了问题。实际上,这段代码可能已经不是正确独立的功能。

    我怀疑这取决于已经在另一段代码中加载的模型,这就是它可能工作的原因。组件的工作不应依赖于其他代码,因此添加 App::uses、App::import 等语句可使代码始终工作。例如,当您在其他项目中重复使用它时。

    第二:

    第二个问题确实与迁移问题有关。检查模型是否首先扩展了 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-28
      • 1970-01-01
      • 2014-10-30
      • 2018-11-07
      • 2018-06-14
      • 1970-01-01
      • 2020-04-01
      • 1970-01-01
      相关资源
      最近更新 更多