2016-12-06 5 views
0

저는 Yii 2를 처음 사용하고 있습니다. 그리고 기본 API가 정상적으로 작동하고 있으며 데이터베이스에서 반환 된 필드 이름을 변경하려고 시도하고 있습니다. 그래서 attributeLabels()을 내 모델에 추가하고 변경했습니다. 필드의 이름이지만 반영되지 않습니다.Yii2 attributeLabels이 작동하지 않습니다.

아무도 도와 드릴 수 있습니까? 아래는 내 모델 코드입니다 (API 용).

public function attributeLabels() 
{ 
    return [ 
     'ID' => 'ID', 
     'LOGIN' => 'Login', 
     'FIRST_NAME' => 'First Name', 
     'LAST_NAME' => 'Last Name', 
     'EMAIL_ADDRESS' => 'Email Address', 
    ]; 
} 

컨트롤러에 아무 것도 추가해야합니까? 모든 레코드를 반환하는 경우에만 actionIndex 있습니다. 다음은 내 컨트롤러의 코드는

라벨 표시 목적으로 사용되며 모델 속성의 키가되었다하지 않는 속성이 .. 함수에서 은 당신이 (모델의 컬렉션을 반환해야 할 것
public function actionIndex() 
{ 
    $model = Phdlist::find() 
      ->limit(100) 
      ->all(); 
    Yii::$app->response->format = Response::FORMAT_JSON; 
    return $model; 
} 

답변

1

JSON_FORMAT)이 단일 개체 속성의 이름을 검색 컬렉션의

는 키 이름을 기반으로합니다 : 당신이 당신의 문제를 해결하기 위해 yii\base\Model::fields()를 사용해야처럼

'ID' 
    'LOGIN' 
    'FIRST_NAME' 
    'LAST_NAME' 
    'EMAIL_ADDRESS' 
+0

답장을 보내 주셔서 감사합니다. 이름을 사용자가 읽을 수있는 이름으로 변환하는 것을 도와 주시겠습니까? – Kenny

+0

자바 스크립트에서이 결과를 처리하는 클라이언트에게이 결과를 보내려면 적절한 속성을 열 제목으로 추가하고 이 속성을 처리 .. 그렇지 않으면 ..이 결과 json으로 변환 된 모델로하고 싶은 일을 bettere 설명해야합니다. – scaisEdge

+0

테이블에서 필드 이름으로 결과 집합을 얻고 있지만 테이블 이름을 표시하고 싶지 않습니다. .. 나는 당신의 질문을 업데이트 시도하고 적절한 샘플을 추가 이해하지 못하는 – Kenny

0

내가 제대로 이해한다면, 그것은 보인다.

체크 아웃 http://www.yiiframework.com/doc-2.0/guide-rest-resources.html#fields, 특히 섹션을 무시하십시오. fields(). yii\db\ActiveRecord::fields()는 DB에서 채워 된 속성을 반환하는 동안 기본적으로

yii\base\Model::fields() 반환 모든 모델은 필드로 속성.

fields()을 재정 의하여 필드를 추가, 제거, 이름 바꾸기 또는 재정의 할 수 있습니다.

// explicitly list every field, best used when you want to make sure the changes 
// in your DB table or model attributes do not cause your field changes (to keep API backward compatibility). 
public function fields() 
{ 
    return [ 
     // field name is the same as the attribute name 
     'id', 
     // field name is "email", the corresponding attribute name is "email_address" 
     'email' => 'email_address', 
     // field name is "name", its value is defined by a PHP callback 
     'name' => function ($model) { 
      return $model->first_name . ' ' . $model->last_name; 
     }, 
    ]; 
} 

당신은 당신의 모델 코드이 추가 필요 -

여기에 해당 페이지에서 관련 예 (특별히 'email' => 'email_address')입니다. 귀하의 경우에는 'login' => 'username'이됩니다. 그러나 속성 이름에는 공백이 없어야합니다. 따라서 'first_name' => 'first name'은 내가 아는 한 작동하지 않습니다.

관련 문제