Использование атрибутов связанной модели в форме

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Закрыто
nickdenry
Сообщения: 99
Зарегистрирован: 2015.10.28, 04:55

Использование атрибутов связанной модели в форме

Сообщение nickdenry »

Доброго времени суток!

Подскажите, возможно ли использовать поля связанных моделей в форме?

Есть 3 связанные модели, Company hasMany CompanyProject, и CompanyProject hasOne ProjectDeveloper

Код: Выделить всё

    Модель Project
    
    public function getProjectDeveloper()
    {
        return $this->hasOne(Developer::className(), ['id' => 'developer_id']);
    }
 
Модели Company и CompanyProject передаю в форму явно, т.е.

Код: Выделить всё


    <?= $form->field($modelCompany, 'name')->textInput(
            [
                'maxlength' => true,
                'autocomplete' => 'off',
            ]
        ); ?>
        
     <?= $form->field($modelCompanyProject, '['.$index.']name')->textInput(
             [
                 'autocomplete' => 'off',
             ]
           );  ?>

Можно ли создать поле для связанной модели ProjectDeveloper не передавая ее в форму явно?

например:

Код: Выделить всё


  <?= $form->field($modelCompanyProject->projectDeveloper, '['.$index.']name')->textInput(
           [
                'autocomplete' => 'off',
           ]
        ; ?>

При попытке сделать так получаю Call to a member function formName() on a non-object.

В отличие от формы в произвольном helper'е доступ к Developer получаю свободно (Запрос SELECT * FROM `company_project_developers` WHERE `id`=1):

Код: Выделить всё

$companyProject->projectDeveloper->name;
Последний раз редактировалось nickdenry 2015.11.16, 07:05, всего редактировалось 2 раза.
Ответственные программисты с высоким уровнем технического долга (c)
phpshko
Сообщения: 260
Зарегистрирован: 2015.03.21, 02:49

Re: Использование атрибутов связанной модели в форме

Сообщение phpshko »

а что говорит

Код: Выделить всё

var_dump($modelCompanyProject->projectDeveloper);
во вьюхе?
еще обратите внимание нет ли опечаток. Связь getProjectDevelopers , а вызываете $modelCompanyProject->projectDeveloper
nickdenry
Сообщения: 99
Зарегистрирован: 2015.10.28, 04:55

Re: Использование атрибутов связанной модели в форме

Сообщение nickdenry »

@phpshko редактировал пост, когда пришел ваш ответ. Опечатка была здесь на форуме, в коде - getProjectDeveloper.

Во вьюхе (хелпере) доступ получаю свободно,

Код: Выделить всё

$companyProject->projectDeveloper->name; 
при этом генерится запрос

Код: Выделить всё

SELECT * FROM `company_project_developers` WHERE `id`=1
А в форме ну никак не могу :(

Код: Выделить всё

 <?= $form->field($modelCompanyProject->projectDeveloper, '['.$index.']name')->textInput(
           [
                'autocomplete' => 'off',
           ]
        ; ?>
Ответственные программисты с высоким уровнем технического долга (c)
phpshko
Сообщения: 260
Зарегистрирован: 2015.03.21, 02:49

Re: Использование атрибутов связанной модели в форме

Сообщение phpshko »

а именно в файле с формой, а не в хелпере, рядом с
<?= $form->field.....
var_dump выводит форму или null?
nickdenry
Сообщения: 99
Зарегистрирован: 2015.10.28, 04:55

Re: Использование атрибутов связанной модели в форме

Сообщение nickdenry »

@phpshko

Немного разобрался.

В файле с формой происходит странная вещь, если вызываю непосредственно в коде

Код: Выделить всё

 <?= $form->field($modelCompanyProject->projectDeveloper, '['.$index.']name')->textInput(
           [
                'autocomplete' => 'off',
           ]
        ; ?>
все получается и выводится, однако т.к. поля собираются в цикле с использованием функции

Код: Выделить всё

<?php
         function companyProjectTemplate($form, $modelCompanyProject, $index, $prototype = false)
        {
   
          ... 
           другие поля 
          ...
    
            //  выдает Call to a member function formName() on a non-object            
            echo $form->field($modelCompanyProject->projectDeveloper, '['.$index.']name')->textInput(
           [
                'autocomplete' => 'off',
           ];
            
            return ($prototype === false) ? $fieldsTemplate : htmlspecialchars($fieldsTemplate);
        }

            foreach ($modelCompanyProjects as $key => $modelCompanyProject)
            {
                // если вызываю код создания поля здесь - поле создается.
                echo companyProjectTemplate($form, $modelCompanyProject, $key);
            }
        ?>
    ?>
    
Хотя var_dump($modelCompanyProject->projectDeveloper) в функции companyProjectTemplate возвращает

Код: Выделить всё

object(info\models\CompanyProject)[170]
  private '_attributes' (yii\db\BaseActiveRecord) => 
    array (size=4)
      'id' => int 1
      'name' => string 'Test project' (length=16)
      'created_at' => string '2015-11-16 05:46:55' (length=19)
      'updated_at' => string '2015-11-16 05:46:55' (length=19)
  private '_oldAttributes' (yii\db\BaseActiveRecord) => 
    array (size=4)
      'id' => int 1
      'name' => string 'Test project' (length=16)
      'created_at' => string '2015-11-16 05:46:55' (length=19)
      'updated_at' => string '2015-11-16 05:46:55' (length=19)
  private '_related' (yii\db\BaseActiveRecord) => 
    array (size=0)
      empty
  private '_errors' (yii\base\Model) => null
  private '_validators' (yii\base\Model) => null
  private '_scenario' (yii\base\Model) => string 'default' (length=7)
  private '_events' (yii\base\Component) => 
    array (size=0)
      empty
  private '_behaviors' (yii\base\Component) => 
    array (size=0)
      empty
Ответственные программисты с высоким уровнем технического долга (c)
nickdenry
Сообщения: 99
Зарегистрирован: 2015.10.28, 04:55

Re: Использование атрибутов связанной модели в форме

Сообщение nickdenry »

Вопрос закрыт, проблема была в несоответствии параметров в функции в шаблоне.
Ответственные программисты с высоким уровнем технического долга (c)
Закрыто