首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Yii CActiveRecord列名为"attributes“

Yii CActiveRecord列名为"attributes“
EN

Stack Overflow用户
提问于 2013-12-09 06:25:05
回答 1查看 218关注 0票数 0

我使用了一个遗留数据库中的CRUD生成器。在搜索列值时,我会得到以下错误:

htmlspecialchars()期望参数1是string,数组给定(/usr/local/share/yii/framework/web/helpers/CHtml.php:103)

问题是,该模型有一个名为"attributes“的现有列,该列正在创建冲突。我从_search.php中删除了条目,并注释掉了模型中的所有实例,希望至少能让它正常工作,但没有任何运气。如有任何建议,将不胜感激。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-10 10:12:42

每个CActiveRecord实例(或CModel实例)都有一个名为attributes的getter/setter,可以用它设置所有属性。这会导致冲突,因为生成的crud代码使用attributes属性,期望它能像前面描述的那样工作。

控制器所做的事情如下:

代码语言:javascript
复制
$model->attributes=$_POST['ModelClassName'];
// or 
$model->attributes=$_GET['ModelClassName'];

这意味着立即设置模型的(安全)属性。相反,这会覆盖遗留DB模型的数据库属性attributes

这反过来导致您描述的错误,因为$_GET['ModelClassName']$_POST['ModelClassName']通常包含数据数组。

我想最简单的解决方法是直接调用setter函数进行“正常”attributes行为,这将导致用如下所示的代码替换上面提到的行:

代码语言:javascript
复制
// in the controller
$model->setAttributes($_POST['ModelClassName']);
// and 
$model->setAttributes($_GET['ModelClassName']);

我认为生成的CRUD代码(视图)的其余部分可以而且应该保持不变,以使其正常工作。

如果您想知道它是如何工作的以及为什么工作的话,最好在__get__set魔术函数中做一些__get__set功能,以及它们如何在yii框架中使用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20464435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档