2013-12-09 5 views
0

레거시 데이터베이스에서 CRUD 생성기를 사용했습니다. 열 값을 검색 할 때 나는 다음과 같은 오류가 발생합니다 :Yii CActiveRecord (이름은 "특성"이라고 함)

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이라는 getter/setter가 있습니다. 생성 된 코드는 attributes 속성을 사용하기 때문에 충돌이 발생합니다. 이전에 설명한대로 동작합니다. 이 알에게 (안전)를 설정하기위한 것입니다

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

한 번 모델의 속성 :

컨트롤러는 같은 작업을 수행합니다. 대신 기존 데이터베이스 모델의 데이터베이스 특성 attributes을 덮어 씁니다.

일반적으로 $_GET['ModelClassName']$_POST['ModelClassName']에는 데이터 배열이 포함되어 있으므로 설명하는 오류가 발생합니다.

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

내가 생각하는 나머지 :

내가 가장 쉬운 수정이 직접 다음과 같이 뭔가 위에서 언급 한 라인을 교체로 이어질 것 "정상적인"attributes 행동 세터 함수를 호출하는 것 같아요 생성 된 CRUD 코드 (보기)를 작동시킬 수있는 그대로 유지해야합니다. 당신은 어떻게이 작품 이유는 __get__set 마법 기능에 어떤 research을 할 최선의 방법과 그들이 YII 프레임 워크에서 사용하는 방법을 알고 싶다면

.