【问题标题】:CakePHP 4 - Unknown method "loadModel"CakePHP 4 - 未知方法“loadModel”
【发布时间】:2021-11-17 21:14:08
【问题描述】:

在 CakePHP 4 应用程序中,我已将其添加到模型中,src/Model/Table/SignUpsTable.php

 public function initialize(array $config): void
 {
     parent::initialize($config);
     // ...
     $this->loadModel('EmailDomains');
 }

我有一个名为 EmailDomains 的模型,并且存在相应的表/实体类文件。

在控制器方法中,我有以下内容:

// src/Controller/UsersController.php
public function initialize(): void
{
    parent::initialize();

    $this->loadModel('SignUps');
}

public function signUp()
{
   // ...
}

在我的浏览器中导航到/sign-up 时出现以下错误:

在 App\Model\Table\SignUpsTable 上调用了未知方法“loadModel”

如果我注释掉SignUpsTable::initialize 中的loadModel 代码,它会清除此错误,但我在其中的其他代码将无法工作,因为它引用了$this->EmailDomains->...

【问题讨论】:

    标签: cakephp


    【解决方案1】:

    那是因为loadModel 实际上不是该类中的方法。

    \TableRegistry::getTableLocator()->get('EmailDomains') 将返回表对象(如果您只需要一次可以直接引用它,或者保存在局部变量或类属性中)

    或者,如果您在特定的表类中 use Cake\Datasource\ModelAwareTrait;,那么您应该可以使用 loadModel 函数。

    【讨论】:

    • 有什么方法可以找出您需要的use 语句吗?例如,您怎么知道 loadModel()ModelAwareTrait,因为这些名称的命名方式并非任何人都能直观地意识到?
    • 关于“如果你use Cake\Datasource\ModelAwareTrait ...”这实际上不起作用。结果与问题中的错误消息相同。我已经把它放在了适当的 Table 类中。
    • CakePHP 只是 PHP,因此您可以搜索源代码以查找定义函数的位置。或者,如果您使用任何类型的现代 IDE,可能有一种方法可以从有效使用(例如在控制器中)跳转到函数的定义。
    • 你把你的use声明放在哪里了?在类定义中,还是在文件的最顶部?
    • 在文件的顶部和其余部分
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-23
    相关资源
    最近更新 更多