2014-11-18 2 views
0

Я пытаюсь использовать ActiveDataProvider в качестве источника для моего ActiveDataForm. Однако я не могу получить доступ к информации. Не изнутри представления или контроллера. Как всегда работает функцияList + ListView.yii2 ActiveDataProvider в сочетании с ActiveForm?

Я не могу понять, где я ошибся. Даже когда я получаю такое заболевание:

$disease = new Disease(); 
$disease = Disease::find()->where(['id'=>1]); 

Я не могу получить доступ к данным. Только когда я инициирую новое заболевание в контроллере, я могу заставить ActiveForm работать правильно.

Контроллер:

public function actionIndex($id = 1) 
{ 
    $disease = new ActiveDataProvider([ 
     'query' => Disease::find() 
     ->where(['id'=>$id]), 
      'pagination' => [ 
       'pageSize' => 1, 
      ] 
     ]); 

    $diseaseList = new ActiveDataProvider([ 
     'query' => Disease::find()->orderBy('LOWER(name)'), 
      'pagination' => [ 
       'pageSize' => 20, 
      ] 
     ]); 
    return $this->render('index', ['disease' => $disease, 'diseaseList' => $diseaseList]); 
} 

На мой взгляд:

<?php 
echo ListView::widget([ 
'dataProvider' => $diseaseList, 
'itemView' => function($diseaseList, $key, $index, $widget) 
{ 
    return 
     Html::a($diseaseList->name, 
      Url::toRoute(['disease/index', 'id' => $diseaseList->primaryKey])); 
} 
]); 
?> 

<?php 
    $form = ActiveForm::begin([ 
    'id' => 'disease-form-vertical' 
    ]); 
    ?> 
     <?= $form->field($disease, 'name') ?> 
     <?= $form->field($disease, 'description') ?> 
     <?= $form->field($disease, 'transmission') ?> 
     <?= $form->field($disease, 'actions') ?> 
     <?= $form->field($disease, 'report') ?> 
     <?= $form->field($disease, 'exclusion') ?> 
     <?= $form->field($disease, 'notes') ?> 
    <div class="form-group"> 
     <?= Html::submitButton('Login', ['class' => 'btn btn-primary']) ?> 
     <?= Html::resetButton('Reset', ['class' => 'btn btn-default']) ?> 
    </div> 
    <?php ActiveForm::end(); ?> 

Здесь ошибка я получаю. Error

ответ

1

Существует что-то здесь не так, что:

$disease = Disease::find()->where(['id'=>1]); 

Это должно быть:

$disease = Disease::find()->where(['id'=>1])->one(); 

Чтобы узнать, почему вы получите эту ошибку: вы передаете ActiveQuery к вашему ActiveForm по $disease = Disease::find()->where(['id'=>1]) что неправильно. ActiveForm не принимает ActiveQuery.

+0

Спасибо! Попробуй это утром! – Wijnand

+0

Добро пожаловать, дорогая;) –

+0

Это решило проблему. Я также принял совет от моего выступления, чтобы начать читать наиболее важные элементы Yii2, он сказал мне, что весь этот вопрос не существовал бы, если бы я сделал это раньше. Спасибо за вашу помощь! – Wijnand

Смежные вопросы