2013-12-09 61 views
0

我使用了遺留數據庫中的CRUD生成器。當列值搜索我得到以下錯誤:Yii CActive記錄列名爲「屬性」

htmlspecialchars() expects parameter 1 to be string, array given (/usr/local/share/yii/framework/web/helpers/CHtml.php:103)

的問題是,該模型有一個名爲現有列「屬性」,這是創建一個衝突。我從_search.php中刪除了條目,並將模型中的所有實例都註釋掉了,希望至少可以讓它工作,但沒有運氣。任何建議,將不勝感激。

謝謝。

+0

如果它是單個表中的單個列,您可以重命名嗎? –

+0

我們需要看到產生這個錯誤的代碼。您應該可以打開配置文件中的錯誤日誌,以便您可以確切地查看它所指的文件/行號。 – Pitchinnate

回答

0

每個CActiveRecord實例(或CModel實例)都有一個名爲attributes的獲取/設置器,可以設置所有屬性。這會導致衝突,因爲生成的粗股代碼使用期望其如前所述的attributes屬性。

控制器確實是這樣的:

$model->attributes=$_POST['ModelClassName']; 
// or 
$model->attributes=$_GET['ModelClassName']; 

這是爲了建立人的(安全)一次的屬性模型。相反,這會覆蓋舊數據庫模型的數據庫屬性attributes

這反過來導致您描述的錯誤,因爲$_GET['ModelClassName']$_POST['ModelClassName']通常包含數據數組。

我想最簡單的解決將是直接調用setter函數爲「正常」 attributes行爲,這將導致東西代替上述行類似如下:

// in the controller 
$model->setAttributes($_POST['ModelClassName']); 
// and 
$model->setAttributes($_GET['ModelClassName']); 

我想休息生成的CRUD代碼(視圖)可以並且應該保持不變以使其工作。

如果你想知道如何和爲什麼這工作,最好做一些research__get__set神奇功能,以及它們如何在Yii框架中。