Yii2模型加载异常' ReflectionException'消息'等级要求不存在'

时间:2016-08-25 09:03:16

标签: php yii2 yii2-advanced-app

我使用 Yii2高级;并有一个问题。

代码:

$model = \Yii::createObject($this->modelClass);
if ($model->load($temp, '') && $model->validate()) {
    $data = $model;
}

$temp - 是模型数据数组;

$this->modelClass - 动态模型类名;

代码在 cli模式(Yii2控制台应用程序)中运行,modelClass - 来自backend应用程序的模型。

它在load方法中崩溃

Exception 'ReflectionException' with message 'Class require does not exist'

in /path/to/project/vendor/yiisoft/yii2/di/Container.php:422

这很奇怪,因为模型Brand 有效,但类似的其他模型却没有。但是,模型对象已成功创建。

更新类别型号代码

<?php

namespace backend\models;

/**
 * Category model
 */
class Category extends \yii\db\ActiveRecord
{
 /**
  * @inheritdoc
  */
  public static function tableName()
  {
    return '{{%category}}';
  }

 /**
  * @inheritdoc
  */
  public function attributes()
  {
    return [
        'id',
        'parent_id',
        'name',
        'image',
    ];
  }

 /**
  * @inheritdoc
  */
  public function attributeLabels()
  {
    return [
        'id' => \Yii::t('backend/model', 'ID'),
        'parent_id' => \Yii::t('backend/model', 'Parent cat ID'),
        'name' => \Yii::t('backend/model', 'Name'),
        'image' => \Yii::t('backend/model', 'Image'),
    ];
  }

 /**
  * @inheritdoc
  */
  public function rules()
  {
    return [
        ['name', 'require'],
        [['name', 'image'], 'string', 'max' => 255],
        [['id', 'parent_id'], 'integer'],
        ['parent_id', 'exist', 'targetAttribute' => 'id', 'skipOnEmpty' => true],
        ['parent_id', 'default', 'value' => 0],
    ];
  }

 /**
  * Method select parent category
  * @return \yii\db\ActiveQuery
  */
  public function getParent()
  {
    return $this->hasOne(static::className(), ['id' => 'parent_id']);
  }
}

3 个答案:

答案 0 :(得分:5)

如此愚蠢的错误。

在模型的规则中,我写道:

['name', 'require'],

获得例外:

Exception 'ReflectionException' with message 'Class require does not exist'

in /path/to/project/vendor/yiisoft/yii2/di/Container.php:422

但验证者的有效名称必需 - 最后有d

恕我直言该错误并不清楚。

答案 1 :(得分:0)

使用容器创建一个对象,你应该设置类,你可以通过数组创建对象(&#39;类&#39; =&gt; $ this-&gt; modelClass);

答案 2 :(得分:0)

如果您尝试从$this->modelClass创建一个ActiveRecord对象,其中modelClass是动态文本字符串,请尝试:

$className = (string)$this->modelClass;
$model = new $className;

if ($model->load($temp, '') && $model->validate()) {
    $data = $model;
}

modelClass必须正是要实例化的类的名称空间。在$ className赋值行上执行断点,以确保使用的值确实是所需的命名空间。