За последние 24 часа нас посетили 20627 программистов и 1097 роботов. Сейчас ищут 760 программистов ...

Данные не уходят из формы, помогите разобраться.

Тема в разделе "Laravel", создана пользователем oldnomad, 13 сен 2019.

  1. oldnomad

    oldnomad Новичок

    С нами с:
    31 авг 2019
    Сообщения:
    11
    Симпатии:
    0
    Создал форму:
    Код (Text):
    1. <!DOCTYPE html>
    2. <html lang="ru">
    3. <head>
    4.     <title>FORM</title>
    5. </head>
    6. <body>
    7. {{--'action' => 'FormController@form',--}}
    8. <form>
    9. {{ Form::open(['url' => '/form/page', 'method' => 'post']) }}
    10.  
    11.     {{ Form::text('surname','') }} Фамилия
    12.     <br/>
    13.     <br/>
    14.     {{ Form::text('name','') }} Имя
    15.     <br/>
    16.     <br/>
    17.     {{ Form::text('patronymic','') }} Отчество
    18.     <br/>
    19.     <br/>
    20.     {{Form::email('email', '')}} e-mail
    21.     <br/>
    22.     <br/>
    23.     {{ Form::text('login','') }} Login
    24.     <br/>
    25.     <br/>
    26.     {{Form::password('password')}} Password
    27.     <br/>
    28.     <br/>
    29. @php
    30.     $prog = ['BASIC' => 'Basic', 'ALGOL' => 'Algol', 'FORTRAN' => 'Fortran', 'PASCAL' => 'Pascal', 'ASSEMBLER' => 'Assembler'];
    31. @endphp
    32. @foreach ($prog as $key => $elem)
    33.         {{Form::checkbox('prog', $key)}} {{ $elem }} <br>
    34. @endforeach
    35.     <br/>
    36. @php
    37.     $contr = ['russia' => 'Россия', 'china' => 'Китай', 'india' => 'Индия', 'brazil' => 'Бразилия', 'japan' => 'Япония'];
    38. @endphp
    39.     <br/>
    40. @foreach( $contr as $key => $elem)
    41.         {{Form::radio('contr', $key)}} {{ $elem }} <br>
    42. @endforeach
    43.     <br/>
    44.     Выберите цвет:
    45. @php
    46.     $color = ['red' => 'red', 'blue' => 'blue', 'yellow' => 'yellow', 'black' => 'black', 'green' => 'green', 'gray' => 'grey']
    47. @endphp
    48.     {{Form::select('color', $color) }} <br>
    49.     <br/>
    50.     {{Form::file('image')}}
    51.     <br/>
    52.     <br/>
    53.     {{Form::submit('Отправить')}}
    54.  
    55. {{ Form::close() }}
    56.  
    57. </form>
    58. </body>
    59. </html>
    Хочу получить данные на другой странице - /form/page

    Код (Text):
    1. <!DOCTYPE html>
    2. <html lang="ru">
    3. <head>
    4.     <title>PAGE</title>
    5. </head>
    6. <body>
    7. ДАННЫЕ ИЗ ФОРМЫ:
    8. @php
    9. var_dump($data);
    10. @endphp
    11.  
    12. </body>
    13. </html>
    Контроллер под это дело:

    Код (Text):
    1. <?php
    2. namespace App\Http\Controllers;
    3. use Illuminate\Http\Request;
    4. class FormController extends Controller
    5. {
    6.     public function form(Request $request)
    7.     {
    8.         var_dump($request->all());
    9.         return view('form.form');
    10.     }
    11.  
    12.     public function result(Request $request)
    13.     {
    14.         $data = $request->all();
    15.         return view('form.page', ['data' => $data]);
    16.     }
    17. }
    И соотвественно роуты:

    Код (Text):
    1. Route::get('/form', 'FormController@form');
    2. Route::post('/page', 'FormController@result');
    Ошибок никаких не возникает. После нажатия кнопки отправить форма остается на экране, var_damp показывает что данные сформировались на странице формы. В адресной строке появляются все данные, как будто я отправляю методом GET, хотя вроде везде указал что должен быть POST. На странице page данные не появились.
    А необходимо чтобы данные отправились все же методом POST (адресная строка должна быть чистой), открыться страница page и на ней var_dump должен показать весь массив переданных данных.
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.548
    Симпатии:
    1.754
    А вы смотрели, какой код сформировал плагин? И у вас старый ларавел или laravelcollective?
     
  3. oldnomad

    oldnomad Новичок

    С нами с:
    31 авг 2019
    Сообщения:
    11
    Симпатии:
    0
    В общем я нашел корень зла - не работающий заголовок формы, написанный по мануалу. Встретил единомышленника, который наступил на такие же грабли и любезно поделился информацией. Делюсь и я с вами.
    Вместо заголовка (хотя тут же, в документации, написано что по-умолчанию работает метод post, но увы) :
    Код (Text):
    1. {{ Form::open(['url' => '/form/page', 'method' => 'post']) }}
    Я написал вот так:
    Код (Text):
    1.  <form action="{{URL::to('/page')}}" method="post">{{ csrf_field() }}
    И все заработало! Форма отправилась методом post, на другую страницу - все как и планировалось.
    P.S. Правки поддались еще и маршруты, они стали именованными, но это сильно к делу не относится.
    P.S.S. По поводу старого laravel или laravelcollective. Конечно стоит laravelcollective, старый ставить не имеет смысла.
    Снимок экрана 2019-09-14 в 17.38.58.png Снимок экрана 2019-09-14 в 17.37.28.png
     
    #3 oldnomad, 14 сен 2019
    Последнее редактирование: 14 сен 2019