Yii2框架控制器报错:获取未知属性Documenttemplateelement::repeat
问题描述
维护遗留PHP(Yii2框架)代码时,编辑页面元素触发错误,提示Documenttemplateelement模型不存在repeat属性,具体报错及堆栈跟踪如下:
Exception (未知属性) 'yii\base\UnknownPropertyException' 错误信息: '获取未知属性: common\models\Documenttemplateelement::repeat' 在 C:\xampp\htdocs\ddtool\vendor\yiisoft\yii2\base\Component.php:154 堆栈跟踪: #0 C:\xampp\htdocs\ddtool\vendor\yiisoft\yii2\db\BaseActiveRecord.php(298): yii\base\Component->__get('repeat') #1 C:\xampp\htdocs\ddtool\vendor\yiisoft\yii2\helpers\BaseHtml.php(2233): yii\db\BaseActiveRecord->__get('repeat') #2 C:\xampp\htdocs\ddtool\vendor\yiisoft\yii2\helpers\BaseHtml.php(1826): yii\helpers\BaseHtml::getAttributeValue(Object(common\models\Documenttemplateelement), 'repeat') #3 C:\xampp\htdocs\ddtool\vendor\yiisoft\yii2\helpers\BaseHtml.php(1664): yii\helpers\BaseHtml::activeListInput('dropDownList', Object(common\models\Documenttemplateelement), 'repeat', Array, Array) #4 C:\xampp\htdocs\ddtool\vendor\yiisoft\yii2\widgets\ActiveField.php(654): yii\helpers\BaseHtml::activeDropDownList(Object(common\models\Documenttemplateelement), 'repeat', Array, Array) #5 C:\xampp\htdocs\ddtool\vendor\yii-ui\yii2-materialize\ActiveField.php(189): yii\widgets\ActiveField->dropDownList(Array, Array) #6 C:\xampp\htdocs\ddtool\backend\views\documentmanager\element.php(50): yiiui\yii2materialize\ActiveField->dropDownList(Array) #7 C:\xampp\htdocs\ddtool\vendor\yiisoft\yii2\base\View.php(348): require('C:\\xampp\\htdocs...') #8 C:\xampp\htdocs\ddtool\vendor\yiisoft\yii2\base\View.php(257): yii\base\View->renderPhpFile('C:\\xampp\\htdocs...', Array) #9 C:\xampp\htdocs\ddtool\vendor\yiisoft\yii2\base\View.php(156): yii\base\View->renderFile('C:\\xampp\\htdocs...', Array, Object(backend\controllers\DocumentmanagerController)) #10 C:\xampp\htdocs\ddtool\vendor\yiisoft\yii2\base\Controller.php(386): yii\base\View->render('element', Array, Object(backend\controllers\DocumentmanagerController)) #11 C:\xampp\htdocs\ddtool\backend\controllers\DocumentmanagerController.php(228): yii\base\Controller->render('element', Array) #12 [内部函数]: backend\controllers\DocumentmanagerController->actionElementUpdate('137') #13 C:\xampp\htdocs\ddtool\vendor\yiisoft\yii2\base\InlineAction.php(57): call_user_func_array(Array, Array) #14 C:\xampp\htdocs\ddtool\vendor\yiisoft\yii2\base\Controller.php(157): yii\base\InlineAction->runWithParams(Array) #15 C:\xampp\htdocs\ddtool\vendor\yiisoft\yii2\base\Module.php(528): yii\base\Controller->runAction('element-update', Array) #16 C:\xampp\htdocs\ddtool\vendor\yiisoft\yii2\web\Application.php(103): yii\base\Module->runAction('documentmanager...', Array) #17 C:\xampp\htdocs\ddtool\vendor\yiisoft\yii2\base\Application.php(386): yii\web\Application->handleRequest(Object(yii\web\Request)) #18 C:\xampp\htdocs\ddtool\backend\web\index.php(22): yii\base\Application->run() #19 {main}
解决步骤
- 检查数据库表结构:确认
documenttemplateelement表是否存在repeat字段,若不存在,根据业务需求添加对应字段(比如用tinyint(1)存储开关状态,或varchar存储枚举值)。 - 更新模型类:打开
common/models/Documenttemplateelement.php,如果是手动定义属性,添加public $repeat;;如果是ActiveRecord自动映射,若模型设置了$attributes数组,需把repeat加入其中。 - 修正视图代码:查看
backend/views/documentmanager/element.php第50行的下拉列表代码,确认是否误写属性名,若为笔误,将repeat改为模型实际存在的属性。 - 清除应用缓存:执行命令
php yii cache/flush-all清除Yii2的模型缓存,确保新添加的字段能被模型正确读取。
内容的提问来源于stack exchange,提问作者Amir Dora.
相关产品推荐
相关产品推荐

