我使用 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']);
}
}
答案 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赋值行上执行断点,以确保使用的值确实是所需的命名空间。