2016-09-01 2 views
1

DetailView에서 'value'에 함수 값을 지정하려고합니다. 하지만 내가 "클래스 개체를 문자열로 변환 할 수 없습니다."라는 오류가 발생했습니다.세부 정보보기에서 값 속성에 기능 할당 yii2

다른 변수에도 동일한 오류를 지정하여 함수의 값을 반환하려고했지만 동일한 오류가 발생했습니다.

제발 도와 주실 수 있습니까?

<?= DetailView::widget([ 
    'model' => $model, 
    'attributes' => [ 
     'Task_ID', 
     'Task_Title', 
     'Description', 
     'projects.project_name', //display project name instead of project id 
     // 'Assign_task_to', 
     //'tasksemp.Employee_ID', 
     [ 
      'attribute' => 'Assign_task_to', 
      'format' => 'raw', 

      $data = function ($model) { 
       $assignEmpModel = Tasksemp::find()->where(['Task_ID' => $model->Task_ID])->all(); //get all the rows with teh same task_id 
       $employes = ''; //empty string 
       foreach ($assignEmpModel as $employee) { 
        $emp = Employee::find()->where(['Employee_ID'=>$employee->Employee_ID])->one(); //get all the employee_id 
        $name = $emp['employee_name']; //get the employee_name from the employees table 
        $employes .= ' '.$name.', '; //concatenate the names. 
       } 
      // return implode(', ',$employes); 
      //return $employes; 
      }, 
      'value' => $data, 
     ], 
     'start_date', 
     'due_date', 
     'priotiy_level', 
     'upload_documents', 
    ], 
]) ?> 

변수 $ 데이터에 함수를 할당했지만 시도하지 않았습니다.

필자는 함수를 값에 직접 할당하려고 시도했지만 동일한 오류가 발생했습니다.

[ 
      'attribute' => 'Assign_task_to', 
      'format' => 'raw', 
      'value' => function ($model) { //<----- ERROR HERE! 
       $assignEmpModel = Tasksemp::find()->where(['Task_ID' => $model->Task_ID])->all(); //get all the rows with teh same task_id 
       $employes = ''; //empty string 
       foreach ($assignEmpModel as $employee) { 
        $emp = Employee::find()->where(['Employee_ID'=>$employee->Employee_ID])->one(); //get all the employee_id 
        $name = $emp['employee_name']; //get the employee_name from the employees table 
        $employes .= ' '.$name.', '; //concatenate the names. 

       } 
       return $employes; 
      }, 
     ], 

이 같은 Bizley의 솔루션을 시도 :

<?php $assignEmpModel = Tasksemp::find()->where(['Task_ID' => $model->Task_ID])->all(); //get all the rows with teh same task_id 
       $employes = ''; //empty string 
       foreach ($assignEmpModel as $employee) { 
        $emp = Employee::find()->where(['Employee_ID'=>$employee->Employee_ID])->one(); //get all the employee_id 
        $name = $emp['employee_name']; //get the employee_name from the employees table 
        $employes .= ' '.$name.', '; //concatenate the names. 
?> 

<?= DetailView::widget([ 
    'model' => $model, 
    'attributes' => [ 
     'Task_ID', 
     'Task_Title', 
     'Description', 
     'projects.project_name', //display project name instead of project id 
     // 'Assign_task_to', 
     //'tasksemp.Employee_ID', 
     [ 
      'attribute' => 'Assign_task_to', 
      'format' => 'raw', 
      'value' => $employes, 
     ], 
     'start_date', 
     'due_date', 
     'priotiy_level', 
     'upload_documents', 
    ], 
]) ?> 

을하지만 지금은 오류가 예기치 않은 파일의 끝은 말한다.

+0

당신은 논리보기 ('$의 employees' 변수를 채우기 위해 SQL 쿼리를 만드는)를 넣으면 안됩니다, 그것은 모델이나 별도의 구성 요소에 대한 일이다. 보기는 표시 및 형식 지정 만 담당합니다. 이것은 MVC 원칙에 위배됩니다. – arogachev

답변

2

DetailView는 단일 모델 (GridView와 같은 여러 모델에서 반복되지 않음)에서 작동하기 때문에 DetailView는 필요하지 않으므로 값에 대한 클로저를 허용하지 않습니다.

첫 번째 방법은 배열 요소 사이에 일부 코드를 푸시하려고하기 때문에 완전히 잘못되었습니다. 두 번째 접근법은 괜찮지 만 여기서는 종결이 허용되지 않습니다.

은 단순히 몸 당신의 function ($model) (물론 return 부분 제외) 인 코드를 가지고 내부의 값에 대한 $employes 변수를 사용하여 다음 <?= DetailView::widget(... 위를 넣어.

[ 
    'attribute' => 'Assign_task_to', 
    'format' => 'raw', 
    'value' => $employes, 
], 
+0

나는 그것을 시도했지만 또 다른 오류가 온다. 예기치 않은 파일 끝입니다. – user2211486

+0

나는 전체 기능이 아니라 기능의 몸을 사용하라고 말했다. – Bizley

+0

나는 그것을 시도했다. 그러나 파일의 예기치 않은 끝. – user2211486

0

사용자 정의 기능을 사용하여 DetailView에서 값을 가져올 수 있습니다.

사용 call_user_func()이를 달성하기 위해 :

<?= \yii\widgets\DetailView::widget([ 
    'model' => $yourModel, 
    'attributes' => [ 
     [ 
      'label' => 'Your label', 
      'value' => call_user_func(function ($model) { 
       // do what you like 
       // return your value; 
      }, $yourModel), 
     ], 
     // more attributes 
    ] 
]); ?> 
관련 문제