Страница 1 из 1

Выпадающий список

Добавлено: 2017.03.17, 15:10
zxc
Здравстуйте. Ошибка при создании выпадающего списка на странице book-create. Текст ошибки Missing argument 1 for yii\db\BaseActiveRecord::findAll(), called in C:\diplom_books\www\protected\views\site\book-create.php on line 23 and defined

Код контроллера

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

public function actionBooksCreate()
    {
		$model = new \app\models\Book();
		$authors = \app\models\Author::find()->all();
		
		if ($model->load(Yii::$app->request->post())) {
			if ($model->validate()) {
				$model->save();
				return $this->redirect(['books']);
			}
        }
		
        return $this->render('book-create', [
			'book' => $model, 'authors' => $authors,
		]);
    }
Код view

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

<?php
	use yii\helpers\Html;
	use yii\bootstrap\ActiveForm;
	use yii\helpers\ArrayHelper;
	//use app\models\Author;
?>

<h1>Создать новую книгу</h1>

<?php $form = ActiveForm::begin([
	'id' => 'book-create-form',
	'layout' => 'horizontal',
	'fieldConfig' => [
		'template' => "{label}\n<div class=\"col-lg-3\">{input}</div>\n<div class=\"col-lg-8\">{error}</div>",
		'labelOptions' => ['class' => 'col-lg-1 control-label'],
	],
]); ?>

	<?= $form->field($book, 'name')->textInput() ?>
	
	<?= $form->field($book, 'author_id')->textInput() ?>
	
	<?= $form->field($authors, 'id')->dropDownList(ArrayHelper::map(app\models\Author::findAll(), 'name')) ?>
	
	<?= $form->field($book, 'pages')->textInput() ?>
	
	<?= $form->field($book, 'price')->textInput() ?>

	<div class="form-group">
		<div class="col-lg-offset-1 col-lg-11">
			<?= Html::submitButton('Create', ['class' => 'btn btn-primary', 'name' => 'book-create-button']) ?>
		</div>
	</div>

<?php ActiveForm::end(); ?>

Re: Выпадающий список

Добавлено: 2017.03.17, 15:13
Onotole
В findAll() надо передавать условие. Хотите без условия, используйте find()->all()

Re: Выпадающий список

Добавлено: 2017.03.17, 15:15
zxc
с find не работает

Re: Выпадающий список

Добавлено: 2017.03.17, 15:18
zxc
Missing argument 3 for yii\helpers\BaseArrayHelper::map(), called in C:\diplom_books\www\protected\views\site\book-create.php on line 23 and defined

Re: Выпадающий список

Добавлено: 2017.03.17, 15:19
zxc
Помогите, пожалуйста

Re: Выпадающий список

Добавлено: 2017.03.17, 15:28
Alexum
1. Код с 23 строки в студию
2. Прекращайте спаммить, есть же кнопка "Редактировать сообщение" (карандаш).

Re: Выпадающий список

Добавлено: 2017.03.17, 15:31
Krash

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

<?= $form->field($authors, 'id')->dropDownList(ArrayHelper::map(app\models\Author::find()->all(), 'id', 'name')) ?>
у метода map 3 обязательных аргумента

Re: Выпадающий список

Добавлено: 2017.03.17, 15:31
caHek2x
ну чтож вы не прислушаетесь к совету поучить немного php прежде чем начинать чтото делать ...
потом вам не составит проблемы понять что с вас требуют 3й аргумент ...
лезем в исходники и видим
public static function map($array, $from, $to, $group = null)

Re: Выпадающий список

Добавлено: 2017.03.17, 15:32
andku83
все-таки посмотрите вебинар из предыдущего вашего топика, у вас сразу 90% проблем не появится.

Re: Выпадающий список

Добавлено: 2017.03.17, 15:36
andku83
В контроллере получать авторов даже не нужно.
А вместо:

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

<?= $form->field($book, 'author_id')->textInput() ?>
<?= $form->field($authors, 'id')->dropDownList(ArrayHelper::map(app\models\Author::findAll(), 'name')) ?>
напишите:

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

<?= $form->field($books, 'author_id')->dropDownList(app\models\Author::find()->select(['name', 'id'])->indexBy('id')->column()) ?>

Re: Выпадающий список

Добавлено: 2017.03.17, 15:44
Alexum
shnir писал(а): 2017.03.17, 15:36

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

<?= $form->field($books, 'author_id')->dropDownList(app\models\Author::find()->select(['name'])->indexBy('id')->column()) ?>
'id' в select указывать не обязательно. Но вообще забирать так данные из view не по фен шую.

Re: Выпадающий список

Добавлено: 2017.03.17, 15:50
andku83
Про фен-шуй никто и не говорил. По философии Yii это вполне нормально.
Да и если у меня в форме товара в админке таких запросов 10 штук, то все их делать в контроллере и передавать через переменные во вью, намного красивее не станет, особенно по количеству кода.
Про id согласен.

Re: Выпадающий список

Добавлено: 2017.03.17, 15:51
zxc
Спасибо за помощь. Учу php, но для фреймворка не достаточно знаний