Я работаю над Laravel. У меня есть страница просмотра лезвия, на которой создаются несколько форм (той же модели). Теперь я хочу, чтобы при нажатии кнопки «Отправить» массив всех форм должен быть возвращен контроллеру. Но он возвращает данные только одной формы вместо массива. Как я могу это достичь, Может ли кто-нибудь помочь мне?Получить данные из нескольких форм Laravel
ответ
Что вы можете сделать, так это то, что вам нужно заколеровать поле формы с помощью структуры имен как first_name1, first_name2 и так далее. Затем, после отправки формы, вы можете проверить использование цикла таким же образом и получить значения. Здесь вы можете проверить свой пример кода. Он подсчитывает количество циклов.
Вы можете передать счетчик от представления к контроллеру в скрытом поле. Затем вы можете выполнить цикл для проверки и для ввода входов.
Проверьте мой пример кода:
//determine number of rows in database
$number_of_loop = Input::get('number_of_loop');
$arrayList = []; //defining the array variable
//declaring the validations rules
for($i = 1; $i < $number_of_loop; $i++){
$rules = array(
'currency'.$i => 'required',
'iso_code'.$i => 'required',
'symbol'.$i => 'required',
'status'.$i => 'required'
);
$validator = Validator::make(Input::all(), $rules);
if($validator->fails()){
return Redirect::back()->withErrors($validator)->withInput();
}
}
for ($i=1; $i <= $number_of_loop; $i++) {
$new_currency = new stdClass();
$currency = Input::get('currency' . $i);
$iso_code = Input::get('iso_code'.$i);
$symbol = Input::get('symbol'.$i);
$conversion_rate = Input::get('conversion_rate'.$i);
$status = Input::get('status'.$i);
$new_currency->currency = $currency;
$new_currency->iso_code = $iso_code;
$new_currency->symbol = $symbol;
$new_currency->conversion_rate = $conversion_rate;
$new_currency->enable = $status;
array_push($arrayList, $new_currency);
}
Update1
Для хранения всех записей, создать массив и новый StdClass. Храните всю переменную в атрибутах stdclass. и, наконец, нажмите новый stdclass на массив. Затем вы можете получить доступ ко всем входам формы. Проверьте выше обновленный образец кода
благодарит за код. Но это не работает в моем случае. Если я сделаю то же самое, я получил данные только последней формы среди нескольких. –
Вам необходимо сохранить данные в каждом цикле. В противном случае вы получите значения только из последнего цикла. Сначала сохраните записи в каждом цикле и получите доступ к базе данных. – vijayrana
Извините, я не могу объяснить это лучше. Предположим, когда я запускаю цикл, скажем 4 раза, каждая итерация имеет данные последней формы. Я тестировал его с помощью эха. –
Это не настоящий вопрос о Ларавеле.
Трюк использует различные формы с каждой кнопкой отправки. Тогда это просто. Проверьте представленную кнопку.
if ($request->isMethod('post')) {
if ($request->has('submit_button_form_1')) {
// Handle form
}
elseif ($request->has('submit_button_form_2')) {
// Handle form
}
elseif ($request->has('submit_button_form_3')) {
// Handle form
}
}
благодарит @Schellingerht за код. Но я поставил все эти множественные формы в одной форме. Вы можете сказать, что теперь все формы являются дочерними элементами этой единственной формы. –
Подформы недопустимы html. См. Также http://stackoverflow.com/questions/379610/can-you-nest-html-forms. Лучше разбить, чтобы вы могли обрабатывать разные формы. – schellingerht
Прежде всего, я не думаю, что вы можете отправить несколько форм, это так, как есть. У вас есть два варианта.
Во-первых: Создайте одну форму со всеми полями из всех форм, а затем в контроллере вы просто возьмете какое поле, которое хотите, так же, как вы делали бы из массивов так же. как:
$all_fields= Request::all();
and then
$all_fields['something'], $all_fields['something_else'],
Во-вторых: Использование Ajax, вы можете управлять и отправить значения полей, полей, которые вам нужны.
спасибо @MasterSith. Но я не могу просто поместить все поля в одну форму, поскольку эти множественные формы динамически генерируются при нажатии кнопки. Когда пользователь хочет вставить еще несколько данных, он просто нажимает кнопку, и новая форма добавляется к уже существующим. Затем при отправке клика родительской формы я хочу, чтобы данные всех дочерних форм возвращались в виде массива. Но я понял, что мы не можем отправить несколько форм. Спасибо за это. Я попробую по-другому. –
Используйте ajax, тогда он будет принимать значения от входов и отправлять их контроллеру, вы можете создавать массивы или что угодно. – MasterSith
Если вы используете Laravel 5.2, вы можете проверить данные массива. Вам нужно будет поместить все ваши входы в одну форму, поскольку вы просто не можете отправлять несколько форм. Если в каждой форме были разные URL-адреса для атрибута action
, как это будет работать?
Для передачи данных в виде массива, вы можете использовать суффиксы атрибут name
с []
:
{!! Form::open() !!}
{!! Form::text('name[]') !!}
{!! Form::text('name[]') !!}
{!! Form::text('name[]') !!}
{!! Form::close() !!}
Когда эта форма представляется, name
будет массив с тремя элементами.
Для проверки используйте маски в вашей публикации Имя правила:
return [
'name.*' => 'required|max:255',
];
Вы можете получить доступ к массиву имен в контроллере через Request
объекта:
$names = $request->get('names', []);
foreach ($names as $name) {
User::create(['name' => $name]);
}
Я не узнайте свою структуру данных, поскольку вы не включили ее в свой вопрос, но этого должно быть достаточно, чтобы вы могли обратиться к вашему сценарию.
Вы не можете отправить несколько форм aaik, разве вы не можете просто слить все поля? –
Как я могу объединить их? –
Просто поместите все поля в те же '
' теги ... Если вы хотите какое-то разделение (логическое, семантическое и т. Д.), Вы можете легко достичь этого с помощью '