Yii :: $ app在模型的字段中不可用()

时间:2016-09-01 17:13:25

标签: php yii

以下是我的模型代码的一部分:

public function fields()
    {
        //print_r(Yii::$app->controller->action->uniqueId);
   if(Yii::$app->controller->action->uniqueId == 'user/self' or
            Yii::$app->controller->action->uniqueId == 'user/confirm' or
            Yii::$app->controller->action->uniqueId == 'user/create'){

            if( $this->status == self::STATUS_ACTIVE)
            return [ .......

Yii :: $ app的行返回“试图获取无对象的属性”。是的,Yii :: $ app返回NULL而不是它的对象。怎么会发生这种情况?我应该附上一些设置吗?

UPD: 栈跟踪

"stack-trace": [
    "#0 /var/www/millennials.kz/public_html/models/User.php(218): yii\\base\\ErrorHandler->handleError(8, 'Trying to get p...', '/var/www/millen...', 218, Array)",
    "#1 /var/www/millennials.kz/public_html/vendor/yiisoft/yii2/base/ArrayableTrait.php(143): app\\models\\User->fields()",
    "#2 /var/www/millennials.kz/public_html/vendor/yiisoft/yii2/base/ArrayableTrait.php(119): yii\\base\\Model->resolveFields(Array, Array)",
    "#3 /var/www/millennials.kz/public_html/vendor/yiisoft/yii2/helpers/BaseJson.php(145): yii\\base\\Model->toArray()",
    "#4 /var/www/millennials.kz/public_html/vendor/yiisoft/yii2/helpers/BaseJson.php(164): yii\\helpers\\BaseJson::processData(Object(app\\models\\User), Array, '57c87a13d611d6....')",
    "#5 /var/www/millennials.kz/public_html/vendor/yiisoft/yii2/helpers/BaseJson.php(55): yii\\helpers\\BaseJson::processData(Array, Array, '57c87a13d611d6....')",
    "#6 /var/www/millennials.kz/public_html/vendor/yiisoft/yii2/web/JsonResponseFormatter.php(89): yii\\helpers\\BaseJson::encode(Array, 320)",
    "#7 /var/www/millennials.kz/public_html/vendor/yiisoft/yii2/web/JsonResponseFormatter.php(73): yii\\web\\JsonResponseFormatter->formatJson(Object(yii\\web\\Response))",
    "#8 /var/www/millennials.kz/public_html/vendor/yiisoft/yii2/web/Response.php(947): yii\\web\\JsonResponseFormatter->format(Object(yii\\web\\Response))",
    "#9 /var/www/millennials.kz/public_html/vendor/yiisoft/yii2/web/Response.php(311): yii\\web\\Response->prepare()",
    "#10 /var/www/millennials.kz/public_html/vendor/yiisoft/yii2/base/Application.php(381): yii\\web\\Response->send()",
    "#11 /var/www/millennials.kz/public_html/web/index.php(12): yii\\base\\Application->run()",
    "#12 {main}"
  ]

1 个答案:

答案 0 :(得分:0)

你应该这样做:

  public function fields() {
    $fields = parent::fields();
    $fields["some"] = function () {
        if (Yii::$app->controller->action->uniqueId == 'user/self' or
                Yii::$app->controller->action->uniqueId == 'user/confirm' or
                Yii::$app->controller->action->uniqueId == 'user/create') {

            if ($this->status == self::STATUS_ACTIVE) {
                return "test";
            } else {

                return "zzz";
            }
        } else {

            return "tttt";
        }
    };

    return $fields;
}