Laravel - собрать данные в массив из 8 отдельных форм - PullRequest
0 голосов
/ 07 августа 2020

Мне нужно собрать данные формы из 8 различных форм. Мне нужно, чтобы все формы были подмассивами и имели только 1 массив, содержащий все подмассивы. Причина такой структуры в том, что я буду управлять содержимым по-разному в зависимости от подмассивов.

Каждая форма будет иметь свою собственную кнопку отправки, в настоящее время нет необходимости отправлять все формы одним запросом.

Ниже приведен код для 2 форм.

Вопрос: Если я заполняю обе формы, почему я не вижу одновременно [form_1] и [form_2] в print_r результат при последнем запуске формы?

Теория решения этой проблемы включает конструктор, который будет отвечать за объединение всех данных форм подмассивов.

Результат:

Array
(
    [form_1] => Array
        (
            [user] => 123
        )

)
Array
(
    [form_2] => Array
        (
            [user] => 456
        )

)

Требуемый результат: (должно быть 8, показаны только 2 для демонстрации):

Array
(
    [form_1] => Array
        (
            [user] => 123
        )
    [form_2] => Array
        (
            [user] => 456
        )

)

Мой код:

[routes / web.php]:

Route::get('/form-1', function () {
    return view('form_1');
});

Route::get('/form-2', function () {
    return view('form_2');
});

Route::post("/process_form_1", "FormHandler@result_1");
Route::post("/process_form_2", "FormHandler@result_2");

[Form_1.blade.php]:

Form-1

<form action="/process_form_1" method="post">

  @csrf
  <label for="1">Name</label>
  <input id="1" type="text" name="user"><br>
  <button submit="button" name="button">Send</button>

</form>

[Form_2.blade.php]:

Form-2

<form action="/process_form_2" method="post">

  @csrf
  <label for="1">Name</label>
  <input id="1" type="text" name="user"><br>
  <button submit="button" name="button">Send</button>

</form>

[FormHandler.php]:

пространство имен App \ Http \ Controllers;

use Illuminate \ Http \ Request;

class FormHandler extends Controller {

<code>function result_1(Request $request)
{

  $this->result['form_1'] = $request->input();

  echo "<pre>";
  print_r($this->result);
  echo "
"; // return (redirect ('form-1'));} function result_2 (Request $ request) {$ this-> result ['form_2'] = $ request-> input (); echo "
";
  print_r($this->result);
  echo "
"; // return ( redirect ('form-2'));}

}

1 Ответ

1 голос
/ 07 августа 2020

Думаю, я понимаю, что вы пытаетесь сделать, когда вы делаете запрос к серверу, он создаст новый Laravel экземпляр для обработки запроса и, следовательно, любые объекты (т.е. объект контроллера, который вы пытаетесь для присоединения входных данных запроса к) будет fre sh, поэтому новые запросы не будут иметь доступа к $ this-> result, поскольку это fre sh экземпляр контроллера. Единственный способ получить к нему доступ - это сохранить его в базе данных, а затем получить доступ к нему снова или отправить все данные из всех форм для каждого запроса. Просто невозможно (и вы бы не хотели, чтобы это было) получить доступ к данным из другого запроса.

Вы можете изучить использование Redis для кэширования данных в памяти между запросами, что, вероятно, является наиболее распространенным решением такого рода проблемы.

...