Маршрутизация и Html::beginForm

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
ShNURoK
Сообщения: 168
Зарегистрирован: 2012.04.12, 05:44
Контактная информация:

Маршрутизация и Html::beginForm

Сообщение ShNURoK »

Добрый день.

Подскажите пожалуйста, не могу понять, есть два роута:

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

'unit/<id:\d+>/page/<page:\d+>' => 'unit/view',
'unit/<id:\d+>' => 'unit/view',
потом создаю простую форму с выпадающим списком для перехода:

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

<?= Html::beginForm(['unit/view'], 'GET') ?>
	<?= Html::dropDownList('id', null, $units]) ?>
	<?= Html::submitButton('Go') ?>
<?= Html::endForm() ?>
и соответственно ничего неработает, выводит html

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

<form action="/unit/view" method="GET">
и переход не получается. Возможно такое сделать?
Nex-Otaku
Сообщения: 831
Зарегистрирован: 2016.07.09, 21:07

Re: Маршрутизация и Html::beginForm

Сообщение Nex-Otaku »

В вашем маршруте есть обязательный параметр "id", вы его не передали. Поэтому маршрут и не строится.
ShNURoK
Сообщения: 168
Зарегистрирован: 2012.04.12, 05:44
Контактная информация:

Re: Маршрутизация и Html::beginForm

Сообщение ShNURoK »

В этом по сути вопрос и есть как его передать?

Сделал,

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

Html::beginForm(['unit/view', 'id' => Yii::$app->request->get('id')], 'GET') ?>
в принципе работает, но ссылка вида, unit?id=22, а как сделать enablePrettyUrl, то есть unit/22?

причем это работает, если создать еще роут 'unit' => 'unit/view', без него не работает.
Nex-Otaku
Сообщения: 831
Зарегистрирован: 2016.07.09, 21:07

Re: Маршрутизация и Html::beginForm

Сообщение Nex-Otaku »

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

Html::beginForm(['unit/view', 'id' => $id], 'GET')
Код вполне рабочий. Строит маршрут правильно.

Ищите у себя, что-то ещё влияет. Причина скорее в невнимательности.
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Маршрутизация и Html::beginForm

Сообщение andku83 »

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

gettype(Yii::$app->request->get('id')) ?
если у вас там строка, то вам поможет

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

(int)Yii::$app->request->get('id')
ShNURoK
Сообщения: 168
Зарегистрирован: 2012.04.12, 05:44
Контактная информация:

Re: Маршрутизация и Html::beginForm

Сообщение ShNURoK »

Да не... тут скорее всего это логическая ошибка.
Вопрос такой, возможно сделать форму, в которой есть выпадающий список с категориями, и при выборе категории и нажатии submit перенаправить на эту категорию?
Как узнать-то этот id? Сейчас сделал с JS, ну то есть редирект на onChange().

А по моей задумке должно работать без JS, но нужен роут без id. То есть по нажатии кнопки, идет отправка данных на этот роут без id, с get параметром, но не получается сделать url вида /unit/2, получается unit?id=2
ShNURoK
Сообщения: 168
Зарегистрирован: 2012.04.12, 05:44
Контактная информация:

Re: Маршрутизация и Html::beginForm

Сообщение ShNURoK »

Nex-Otaku писал(а): 2018.02.22, 12:58

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

Html::beginForm(['unit/view', 'id' => $id], 'GET')
Код вполне рабочий. Строит маршрут правильно.

Ищите у себя, что-то ещё влияет. Причина скорее в невнимательности.
$id нет, это в форме мы выбираем из выпадающего списка категорию и в ней содержится id. Так возможно сделать?
Получается роут без id но с параметром get, который идет в url.
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Маршрутизация и Html::beginForm

Сообщение andku83 »

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

<?= Html::beginForm('/unit', 'GET') ?>
но совсем без js не получится, кто-то же должен совмещать урл и ИД
Nex-Otaku
Сообщения: 831
Зарегистрирован: 2016.07.09, 21:07

Re: Маршрутизация и Html::beginForm

Сообщение Nex-Otaku »

Зачем куда-то в URL добавлять категорию, если форма и так отправляет все данные. Выбранная категория - будет просто полем в форме. Оттуда её и берите. В URL запихивать незачем.
ShNURoK
Сообщения: 168
Зарегистрирован: 2012.04.12, 05:44
Контактная информация:

Re: Маршрутизация и Html::beginForm

Сообщение ShNURoK »

shnir писал(а): 2018.02.22, 14:59

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

<?= Html::beginForm('/unit', 'GET') ?>
но совсем без js не получится, кто-то же должен совмещать урл и ИД
Как-то примерно так и сделал.
ShNURoK
Сообщения: 168
Зарегистрирован: 2012.04.12, 05:44
Контактная информация:

Re: Маршрутизация и Html::beginForm

Сообщение ShNURoK »

Nex-Otaku писал(а): 2018.02.22, 22:25 Зачем куда-то в URL добавлять категорию, если форма и так отправляет все данные. Выбранная категория - будет просто полем в форме. Оттуда её и берите. В URL запихивать незачем.
Вы имеете в виду, что создать экшен, где разбирать данные из формы?
Nex-Otaku
Сообщения: 831
Зарегистрирован: 2016.07.09, 21:07

Re: Маршрутизация и Html::beginForm

Сообщение Nex-Otaku »

А разве вы делаете форму без экшена с разбором данных?
Ответить