我使用了旧数据库中的 CRUD 生成器。搜索列值时,出现以下错误:
htmlspecialchars() 期望参数 1 是字符串,给定数组 (/usr/local/share/yii/framework/web/helpers/CHtml.php:103)
问题是模型有一个名为“attributes”的现有列正在创建冲突。我从 _search.php 中删除了该条目,并注释掉了模型中的所有实例,希望至少让它工作但没有运气。任何建议,将不胜感激。
谢谢。
我使用了旧数据库中的 CRUD 生成器。搜索列值时,出现以下错误:
htmlspecialchars() 期望参数 1 是字符串,给定数组 (/usr/local/share/yii/framework/web/helpers/CHtml.php:103)
问题是模型有一个名为“attributes”的现有列正在创建冲突。我从 _search.php 中删除了该条目,并注释掉了模型中的所有实例,希望至少让它工作但没有运气。任何建议,将不胜感激。
谢谢。
每个CActiveRecord
实例(或与此相关的CModel
实例)都有一个命名为 getter/setterattributes
的方法,所有属性都可以用它来设置。这会导致冲突,因为生成的 crud 代码使用attributes
期望它如前所述工作的属性。
控制器执行以下操作:
$model->attributes=$_POST['ModelClassName'];
// or
$model->attributes=$_GET['ModelClassName'];
这意味着一次设置模型的所有(安全)属性。相反,这会覆盖attributes
旧数据库模型的数据库属性。
这反过来又会导致您描述的错误,因为$_GET['ModelClassName']
并且$_POST['ModelClassName']
通常包含数据数组。
我想最简单的解决方法是直接调用“正常”attributes
行为的 setter 函数,这将导致将上面提到的行替换为以下内容:
// in the controller
$model->setAttributes($_POST['ModelClassName']);
// and
$model->setAttributes($_GET['ModelClassName']);
我认为生成的其余 CRUD 代码(视图)可以而且应该保持不变以使其工作。
如果你想知道它是如何工作的以及为什么工作,最好对和魔术函数以及它们如何在 yii 框架中使用进行一些研究。__get
__set