【问题标题】:$this getting unknown property yii console$this 获取未知属性 yii 控制台
【发布时间】:2017-04-05 10:45:09
【问题描述】:

我需要访问一个类的属性(它是一个 Yii2 模型),但是当我在使用此代码调用的该类的函数中引用 $this->expires_on 时:

$int::createNextDate();

($int 是一个加载的 yii 模型)

我得到这个错误:

Exception 'yii\base\UnknownPropertyException' with message 'Getting unknown property: app\commands\DailyCronController::expires_on'

所以基本上 php 在控制器内部寻找属性。 我如何才能访问该模型的属性?

编辑:这是完整的代码

这是命令行使用的控制器的一部分

        $assistanceTasks = \app\models\AssistanceTask::find()->all();
        foreach($assistanceTasks as $task){
            $task::createNextDate();
        }

这是模型 AssistanceTask 中的函数

class AssistanceTask extends \yii\db\ActiveRecord{
...
public function createNextDate(){

    if(!$this->expires_on){
        return "Error....";
    }

但显然“$this”有问题

最终编辑: 正如 Patryk 所指出的,问题是我使用了

$int::createNextDate();

而不是

$int->createNextDate();

所以函数被调用就好像它是一个静态函数。

【问题讨论】:

  • 你能显示调用它的代码吗?

标签: php yii yii2


【解决方案1】:

您不是试图在 Model 上而是在 DailyCronController 上调用 expires_on

【讨论】:

  • 我明白了,但是如何在模型上调用 expires_on?
  • 为什么用::调用非静态方法?使用$task->createNextDate(); insead。然后你应该在$this变量中得到正确的对象
  • 谢谢。我觉得很笨。这就是问题所在。
【解决方案2】:

如果您有可用的填充模型,那么它应该很简单

$model->expires_on;

或者在你的情况下

$int->expires_on;

但是如果没有看到完整的代码真的很难说。

【讨论】:

  • 我更新了帖子。无论如何,代码在模型函数内,我希望能够在控制器内的加载模型上调用它。但是,虽然我可以通过正常的控制器操作来做到这一点,但我不能从命令行做同样的事情。
  • 您不能将 $this 与静态函数一起使用。您需要实例化类或将 expires_on 传递给静态函数@dgtal
  • 但该功能不是静态的(或者我错了吗?),它甚至可以在任何其他控制器上工作
  • 但你称它为静态的......看看这个线程stackoverflow.com/questions/3754786/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多