Передача значений value из update.php в контроллер

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Закрыто
God
Сообщения: 33
Зарегистрирован: 2017.05.17, 09:00
Откуда: Беларусь

Передача значений value из update.php в контроллер

Сообщение God »

Всем привет!
В общем, изучаю фреймворк и появился вопрос. На странице update.php я сделал небольшую табличку из select и ввел в нее данные. Теперь при нажатии на клавишу "Изменить" я хочу что бы данные значения value передались массивом в контроллер, что бы там с ними дальше работать.

Данные выводятся на странице следующим образом (update.php):

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

<select id="pole">
    <option value="10">Запись</option>
    <option value="11">Что-то</option>
    <option value="23">Ещё</option>
    <option value="35">Истчо</option>
    <option value="47">Телефонама</option>
</select>
А теперь как мне сделать так, что бы при нажатии на эту клавишу все значения value передались одним массивом обратно в контроллер?

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

<?= Html::submitButton($model->isNewRecord ? 'Добавить' : 'Изменить', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
И как в контроллере получить этот массив?

Примерно понимаю что надо как-то так получить данный массив:

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

var array = [];
$('#pole option').each(function() {
    array[ $(this).val()] = $(this).text();
});
И в контроллере написать что-то на подобии этого:

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

$array = $_POST['array'];
Но где, как это описать и как это передать обратно в контроллер не понимаю. Подскажите, как правильно это сделать? Буду очень благодарен.
Аватара пользователя
rodion_zlobin
Сообщения: 207
Зарегистрирован: 2017.01.11, 16:33

Re: Передача значений value из update.php в контроллер

Сообщение rodion_zlobin »

Обернуть в тег <form> в селект добавить name; В контроллере получить значение - $_POST['название инпута'], либо $_GET, в зависимости от того, какой action поставите в теге <form>.
Обратите внимание на Html хелпер, работать с гет / пост можно также Yii::$app->request->get('name');
God
Сообщения: 33
Зарегистрирован: 2017.05.17, 09:00
Откуда: Беларусь

Re: Передача значений value из update.php в контроллер

Сообщение God »

rodion_zlobin писал(а): 2017.05.24, 11:49 Обернуть в тег <form> в селект добавить name; В контроллере получить значение - $_POST['название инпута'], либо $_GET, в зависимости от того, какой action поставите в теге <form>.
Обратите внимание на Html хелпер, работать с гет / пост можно также Yii::$app->request->get('name');
Так, в select я добавил name и обернул его в тэг form:

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

<div class="test-form">
	<select id="pole" name="vhod[]">
    		<option value="10">Запись</option>
    		<option value="11">Что-то</option>
    		<option value="23">Ещё</option>
    		<option value="35">Истчо</option>
    		<option value="47">Телефонама</option>
	</select>
</div>
В контроллере, как я понял, надо в actionUpdate добавить $_POST['название инпута']

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

public function actionUpdate($id)
    {
    	$model = $this->findModel($id);
    	
        if ($model->load(Yii::$app->request->post()) && $model->save()) {
	    $_POST['vhod'];
            return $this->redirect(['view', 'id' => $model->ID]);
        } else {
            return $this->render('update', [
                'model' => $model,
            ]);
        }
    }
Теперь при нажатии клавиши "Изменить" нужно считать значения value в массив и отправить полученный массив в контроллер. Как это сделать и привязать к этой кнопке?
Аватара пользователя
PartyPoison
Сообщения: 69
Зарегистрирован: 2017.04.27, 11:04

Re: Передача значений value из update.php в контроллер

Сообщение PartyPoison »

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

<form method="POST">
	<select id="pole" name="vhod">
    		<option value="10">Запись</option>
    		<option value="11">Что-то</option>
    		<option value="23">Ещё</option>
    		<option value="35">Истчо</option>
    		<option value="47">Телефонама</option>
	</select>
</form>
Передает выбранные в селекте данные. Сразу все значения вашего селекта передать не выйдет, разве что при помощи js или использовать атрибут multiple. Опять же лучше хранить эти данные не хардкодом чтобы не было необходимости их передавать в контроллер из представления.
God
Сообщения: 33
Зарегистрирован: 2017.05.17, 09:00
Откуда: Беларусь

Re: Передача значений value из update.php в контроллер

Сообщение God »

PartyPoison писал(а): 2017.05.24, 12:53 Передает выбранные в селекте данные. Сразу все значения вашего селекта передать не выйдет, разве что при помощи js или использовать атрибут multiple. Опять же лучше хранить эти данные не хардкодом чтобы не было необходимости их передавать в контроллер из представления.
Я не хардом храню. Я сейчас реализовал следующее:
У меня есть _form.php, там я описал select, что бы он был доступен в create.php и update.php. В этот select я вывожу данные из БД MySQL, а теперь хочу эти данные поместить в БД ORACLE. То есть после того как они вывелись у меня при открытии страницы update.php, мне при сохранении этой страницы надо передать данные из этого select обратно в контроллер, что бы я там описал действие сохранения этого массива значений в БД ORACLE. Как то так)
Данные в select я записываю по этому примеру: Вывести данные в select
Вот так получилось у меня:

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

<?= Html::activeDropDownList($model, 'ID', $Items, ['multiple' => true, 'size' => 20, 'style' => 'width: 100%', 'id' => 'pole', 'name' => 'vhod']) ?>
Как мне добавить сюда тэг form с методом post?

При просмотре кода страницы я вижу на данный момент следующее:

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

<select id="pole" name="vhod[]" multiple="" size="20" style="width: 100%">
    <option value="10">Запись</option>
    <option value="11">Что-то</option>
    <option value="23">Ещё</option>
    <option value="35">Истчо</option>
    <option value="47">Телефонама</option>
</select>
Аватара пользователя
rodion_zlobin
Сообщения: 207
Зарегистрирован: 2017.01.11, 16:33

Re: Передача значений value из update.php в контроллер

Сообщение rodion_zlobin »

Объясните просто, что вам нужно. Так можно будет что-то ответить. У вас обычное исправление записи, где нужно, чтоб из базы подгрузились значения списка, а после выбранные сохранились? Или у вас какая-то сложная логика, где от выбранного селекта зависят другие поля формы?
God
Сообщения: 33
Зарегистрирован: 2017.05.17, 09:00
Откуда: Беларусь

Re: Передача значений value из update.php в контроллер

Сообщение God »

rodion_zlobin писал(а): 2017.05.24, 14:09 Объясните просто, что вам нужно. Так можно будет что-то ответить. У вас обычное исправление записи, где нужно, чтоб из базы подгрузились значения списка, а после выбранные сохранились? Или у вас какая-то сложная логика, где от выбранного селекта зависят другие поля формы?
Мне нужно следующее:

У меня в БД есть таблица Proba, в которой 3 поля: "ID", "IDPo", "Text".
Так же есть таблица PoItems, в которой 4 поля: "ID", "Name", "Time", "Metro".

Я через инструмент CRUD сделал для таблицы PoItems представления. И теперь хочу что бы при добавлении нового или редактировании старого элемента PoItems у меня была табличка в которой выведено значение "Text" из таблицы Proba.
Я могу оставить все значения в этом select, либо удалить несколько значений из этой таблички и после нажатия "Сохранить/Изменить", то что осталось в этой табличке select должно записаться в другую таблицу другой БД в таком же формате: "ID", "IDPo", "Text".

Я сделал вывод поля "Text" из таблицы Proba в данный select. Вывод осуществлял в _form.php

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

<?php

use yii\helpers\Html;
use yii\widgets\ActiveForm;

?>

<div class="test-form">

    <?php $form = ActiveForm::begin(); ?>

		<?= $form->field($model, 'Name')->textInput(['maxlength' => true]) ?>

		<?= $form->field($model, 'Time')->textInput(['maxlength' => true]) ?>

		<?= $form->field($model, 'Metro')->textInput(['maxlength' => true]) ?>
		
		<div>
			<!--Вывод данных в select-->
			<?= Html::activeDropDownList($model, 'ID', $Items, ['multiple' => true, 'size' => 20, 'style' => 'width: 100%', 'id' => 'pole', 'name' => 'vhod']) ?>
		</div>

		<div class="form-group">
			<?= Html::submitButton($model->isNewRecord ? 'Сохранить' : 'Изменить', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
		</div>

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

</div>
Получается, что мне теперь при нажатии на эту кнопку:

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

<div class="form-group">
	<?= Html::submitButton($model->isNewRecord ? 'Сохранить' : 'Изменить', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
</div>
надо считать данные значений value этого select в массив и передать данный массив в контроллер, что бы я там реализовал дальнейшее их сохранение. Как мне при нажатии клавиши "Сохранить/Изменить" считать данные из этого select в массив и после передать этот массив в контроллер в actionCreate/actionUpdate соответственно? Или не обязательно считывать данные в массив именно при нажатии на кнопку? Как тут поступить? Подскажите как передать массив со значениями value из этого select в контроллер.
Аватара пользователя
PartyPoison
Сообщения: 69
Зарегистрирован: 2017.04.27, 11:04

Re: Передача значений value из update.php в контроллер

Сообщение PartyPoison »

То есть вам нужно сделать экспорт из одной базы данных в другую ? правильно я понимаю ? если так то зачем кнопки и эти селекты не понятные если можно сделать запрос к бд получить массив значений и там же эти значения експортнуть в другую базу? для этого еще консоль в advanced сборке не плохо подходит если проект боевой.
God
Сообщения: 33
Зарегистрирован: 2017.05.17, 09:00
Откуда: Беларусь

Re: Передача значений value из update.php в контроллер

Сообщение God »

PartyPoison писал(а): 2017.05.24, 15:26 То есть вам нужно сделать экспорт из одной базы данных в другую ? правильно я понимаю ? если так то зачем кнопки и эти селекты не понятные если можно сделать запрос к бд получить массив значений и там же эти значения експортнуть в другую базу? для этого еще консоль в advanced сборке не плохо подходит если проект боевой.
Не совсем экспорт. Я просто как пару дней начал изучать фреймворк и придумал себе задание. Вот учусь и пытаюсь реализовать. И что бы приступить к следующему шагу изучения мне надо именно вот так это реализовать. Сможете помочь с поставленной мне мною задачей?
Аватара пользователя
PartyPoison
Сообщения: 69
Зарегистрирован: 2017.04.27, 11:04

Re: Передача значений value из update.php в контроллер

Сообщение PartyPoison »

Собственно у вас с большего в контроллере все готово для этого. уберите условие $model->save(); если не нужно сохранять/обновлять в mysql и работайте с моделью, если на прямую хотите работать с post можете и load убрать, а дальше работайте с данными пришедшими в $_POST из вашей формы, при необходимости в форме укажите action, единственное но, в select элементе он вам отправит при такой вида разметке только одно значение, как вариант использовать js и перехватывать сабмит формы и отправлять свои значения сформировав массив из value селекта как это сделать собственно куча информации в google ну или самое простое это multiple.

p.s укажите тег name для select
God
Сообщения: 33
Зарегистрирован: 2017.05.17, 09:00
Откуда: Беларусь

Re: Передача значений value из update.php в контроллер

Сообщение God »

PartyPoison писал(а): 2017.05.24, 16:00 Собственно у вас с большего в контроллере все готово для этого. уберите условие $model->save(); если не нужно сохранять/обновлять в mysql и работайте с моделью, если на прямую хотите работать с post можете и load убрать, а дальше работайте с данными пришедшими в $_POST из вашей формы, при необходимости в форме укажите action, единственное но, в select элементе он вам отправит при такой вида разметке только одно значение, как вариант использовать js и перехватывать сабмит формы и отправлять свои значения сформировав массив из value селекта как это сделать собственно куча информации в google ну или самое простое это multiple.

p.s укажите тег name для select
В select указан name, я не смог найти подробного примера как это реализовать, можете тыкнуть пальцем в такой пожалуйста? Ну или если можно подробный пример как с multiple это сделать?

Вот, name в самом конце после id

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

['multiple' => true, 'size' => 20, 'style' => 'width: 100%', 'id' => 'pole', 'name' => 'vhod']
God
Сообщения: 33
Зарегистрирован: 2017.05.17, 09:00
Откуда: Беларусь

Re: Передача значений value из update.php в контроллер

Сообщение God »

God писал(а): 2017.05.24, 16:11
PartyPoison писал(а): 2017.05.24, 16:00 Собственно у вас с большего в контроллере все готово для этого. уберите условие $model->save(); если не нужно сохранять/обновлять в mysql и работайте с моделью, если на прямую хотите работать с post можете и load убрать, а дальше работайте с данными пришедшими в $_POST из вашей формы, при необходимости в форме укажите action, единственное но, в select элементе он вам отправит при такой вида разметке только одно значение, как вариант использовать js и перехватывать сабмит формы и отправлять свои значения сформировав массив из value селекта как это сделать собственно куча информации в google ну или самое простое это multiple.

p.s укажите тег name для select
В select указан name, я не смог найти подробного примера как это реализовать, можете тыкнуть пальцем в такой пожалуйста? Ну или если можно подробный пример как с multiple это сделать? А multiple передает все данные которые там есть или только выбранные?

Вот, name в самом конце после id

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

['multiple' => true, 'size' => 20, 'style' => 'width: 100%', 'id' => 'pole', 'name' => 'vhod']
P.S. Блин, это же получается вопрос не по теме фреймворка, простите за такое.
Аватара пользователя
PartyPoison
Сообщения: 69
Зарегистрирован: 2017.04.27, 11:04

Re: Передача значений value из update.php в контроллер

Сообщение PartyPoison »

God писал(а): 2017.05.24, 16:11 В select указан name, я не смог найти подробного примера как это реализовать, можете тыкнуть пальцем в такой пожалуйста? Ну или если можно подробный пример как с multiple это сделать?

Вот, name в самом конце после id

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

['multiple' => true, 'size' => 20, 'style' => 'width: 100%', 'id' => 'pole', 'name' => 'vhod']

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

$form->field($model, 'attr[]')->dropDownList($Items, ['prompt' => 'Выбери несколько', 'multiple' => true']);
Где attr есть name

https://nix-tips.ru/yii2-vypadayushhij- ... nlist.html
God
Сообщения: 33
Зарегистрирован: 2017.05.17, 09:00
Откуда: Беларусь

Re: Передача значений value из update.php в контроллер

Сообщение God »

PartyPoison писал(а): 2017.05.24, 16:24

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

$form->field($model, 'attr[]')->dropDownList($Items, ['prompt' => 'Выбери несколько', 'multiple' => true']);
Где attr есть name

https://nix-tips.ru/yii2-vypadayushhij- ... nlist.html
Такс, я запутался. Что мне даст это? Оно вывело данные в выпадающий список. Но у меня и до этого уже выводило данные. Мне нужно передать данные в контроллер, или же $_POST['vhod']; который есть в контроллере уже их там принимает?

Допустим что я вывел их так, а что далее?

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

<?= $form->field($model, 'ID')->dropDownList($Items, ['method' => 'POST', 'multiple' => true, 'size' => 20, 'style' => 'width: 100%', 'id' => 'pole', 'name' => 'vhod']) ?>
Аватара пользователя
PartyPoison
Сообщения: 69
Зарегистрирован: 2017.04.27, 11:04

Re: Передача значений value из update.php в контроллер

Сообщение PartyPoison »

Почитайте в общем в доках как работают формы.
God
Сообщения: 33
Зарегистрирован: 2017.05.17, 09:00
Откуда: Беларусь

Re: Передача значений value из update.php в контроллер

Сообщение God »

PartyPoison писал(а): 2017.05.24, 23:47 Почитайте в общем в доках как работают формы.
Дайте ссылку на документацию пожалуйста
Аватара пользователя
Alexum
Сообщения: 683
Зарегистрирован: 2016.09.26, 10:00

Re: Передача значений value из update.php в контроллер

Сообщение Alexum »

PartyPoison писал(а): 2017.05.24, 23:47 Дайте ссылку на документацию пожалуйста
http://stuff.cebe.cc/yii2docs-ru/guide-README.html
God
Сообщения: 33
Зарегистрирован: 2017.05.17, 09:00
Откуда: Беларусь

Re: Передача значений value из update.php в контроллер

Сообщение God »

Alexum писал(а): 2017.05.25, 09:47
PartyPoison писал(а): 2017.05.24, 23:47 Дайте ссылку на документацию пожалуйста
http://stuff.cebe.cc/yii2docs-ru/guide-README.html
Спасибо. А можно как то привязать к этой кнопке JavaScript?

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

<div class="form-group">
	<?= Html::submitButton($model->isNewRecord ? 'Сохранить' : 'Изменить', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
</div>
Аватара пользователя
Alexum
Сообщения: 683
Зарегистрирован: 2016.09.26, 10:00

Re: Передача значений value из update.php в контроллер

Сообщение Alexum »

God писал(а): 2017.05.25, 09:59 Спасибо. А можно как то привязать к этой кнопке JavaScript?
Н-р привязаться к событию beforeSubmit.

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

<?php
$script = <<< JS
$('form#{$model->formName()}').on('beforeSubmit', function(e)
{
     ...
});
JS;
$this->registerJs($script);
?>
Закрыто