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

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Закрыто
zxc
Сообщения: 98
Зарегистрирован: 2017.03.13, 01:06

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

Сообщение 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(); ?>
Onotole
Сообщения: 1808
Зарегистрирован: 2012.12.24, 12:49

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

Сообщение Onotole »

В findAll() надо передавать условие. Хотите без условия, используйте find()->all()
zxc
Сообщения: 98
Зарегистрирован: 2017.03.13, 01:06

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

Сообщение zxc »

с find не работает
zxc
Сообщения: 98
Зарегистрирован: 2017.03.13, 01:06

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

Сообщение 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
zxc
Сообщения: 98
Зарегистрирован: 2017.03.13, 01:06

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

Сообщение zxc »

Помогите, пожалуйста
Аватара пользователя
Alexum
Сообщения: 683
Зарегистрирован: 2016.09.26, 10:00

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

Сообщение Alexum »

1. Код с 23 строки в студию
2. Прекращайте спаммить, есть же кнопка "Редактировать сообщение" (карандаш).
Krash
Сообщения: 29
Зарегистрирован: 2016.04.19, 12:43

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

Сообщение Krash »

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

<?= $form->field($authors, 'id')->dropDownList(ArrayHelper::map(app\models\Author::find()->all(), 'id', 'name')) ?>
у метода map 3 обязательных аргумента
Последний раз редактировалось Krash 2017.03.17, 15:33, всего редактировалось 1 раз.
caHek2x
Сообщения: 1240
Зарегистрирован: 2016.04.12, 20:41

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

Сообщение caHek2x »

ну чтож вы не прислушаетесь к совету поучить немного php прежде чем начинать чтото делать ...
потом вам не составит проблемы понять что с вас требуют 3й аргумент ...
лезем в исходники и видим
public static function map($array, $from, $to, $group = null)
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

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

Сообщение andku83 »

все-таки посмотрите вебинар из предыдущего вашего топика, у вас сразу 90% проблем не появится.
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

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

Сообщение 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()) ?>
Аватара пользователя
Alexum
Сообщения: 683
Зарегистрирован: 2016.09.26, 10:00

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

Сообщение 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 не по фен шую.
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

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

Сообщение andku83 »

Про фен-шуй никто и не говорил. По философии Yii это вполне нормально.
Да и если у меня в форме товара в админке таких запросов 10 штук, то все их делать в контроллере и передавать через переменные во вью, намного красивее не станет, особенно по количеству кода.
Про id согласен.
Последний раз редактировалось andku83 2017.03.17, 15:54, всего редактировалось 1 раз.
zxc
Сообщения: 98
Зарегистрирован: 2017.03.13, 01:06

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

Сообщение zxc »

Спасибо за помощь. Учу php, но для фреймворка не достаточно знаний
Закрыто