Не удается получить входные данные из формы laravel

Я изучаю Laravel, и я застрял, пытаясь получить данные из формы.

Я уже могу вернуть данные с помощью GET, но с POST у меня было много проблем. Вот с чем я работаю:

Форма:

<form id="forms" method="POST" action="sugestoes" novalidate>

  {{ csrf_field() }}

  <div class="form-row">

    <div class="form-group col-md-12">
      <label for="obs">Observações:</label>
      <textarea type="text" class="form-control" name="obs" placeholder="Observações" required></textarea>
    </div>

  </div>

    <hr>

  <button type="submit" class="btn btn-primary">Enviar</button>

</form>

  @php 

  if (isset($_POST["obs"])) {
    echo "IN";
  }

  @endphp

Контроллер:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class PostController extends Controller
{

    public function store(Request $request)
    {
        $name = $request->input('obs');

        return redirect('sugestoes');


        //
    }
}

Маршрут:

Route::post('sugestoes', 'PostController@store');

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

Думаю, мне не хватает чего-то действительно простого, но я следил за руководствами и искал в Интернете, я добился некоторого прогресса, но я действительно застрял здесь.

(дополнительная информация, это Laravel 5.4, и я использую XAMPP)

$ _POST не поддерживается через перенаправление.

Devon 31.10.2018 12:46

вам нужно передать данные с помощью метода redirect ('sugestoes') -> with (ваши данные);

Madhusudan 31.10.2018 12:47

@Madhusudan, он по-прежнему не поддерживает $ _POST. Это будет мигать данными сеанса.

Devon 31.10.2018 12:48

@Devon, поэтому я предлагаю способ передачи данных для просмотра.

Madhusudan 31.10.2018 12:50

fyi & OT: атрибут <label> вашего for должен указывать на id элемента формы, поэтому добавьте id="obs" в свой <textarea>

brombeer 31.10.2018 12:58

Я думаю, что не указан URL для отправки формы?

DPS 31.10.2018 13:07

Спасибо, kerbholz, у меня уже был этот идентификатор, но я удалил его во время тестирования, потому что подумал, что он может конфликтовать с «именем» с тем же именем. Я еще раз добавлю id, спасибо за подсказку!

JohnyJohnson 31.10.2018 13:11

URL указан @DPS, вы можете увидеть action в форме, а также в маршруте

Vpa 31.10.2018 13:25
1
8
1 349
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Добавьте следующий код в свой атрибут действия в форме. Он захватит URL-адрес публикации. Когда вы отправляете форму, она отправляет данные формы в конечную точку URL.

action="{{ url('sugestoes')}}"

Затем умрите и сбросьте в свою функцию хранилища контроллера

public function store(Request $request)
{
    dd($request->all());

}

Как это поможет? Просьба уточнить.

Script47 31.10.2018 12:48

На самом деле он попросил базовую помощь, значит, он знает, что делает @ Script47

Marvin Collins 31.10.2018 13:06

так как ваш ответ поможет

Vpa 31.10.2018 13:09
Ответ принят как подходящий

Сначала необходимо вызвать модель use App/Your_model_name;, а затем сохранить данные.

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Suggest; //Suggest model, let's hope you have suggest table

class PostController extends Controller
{

  public function store(Request $request)
  {
    $suggest = new Suggest; //model
    $suggest->name = $request->obs; //name is DB name, obs is request name
    $suggest->save(); //save the post to DB

    return redirect()->back()->with('success', 'Saved successfully'); //return back with message
  }
}

Затем, если вы хотите, чтобы сообщение появилось на HTML-странице

@if(session('success'))
  <div class="alert alert-warning alert-dismissible" id="error-alert">
     <strong style="color: white;">{{session('success')}}</strong>
  </div>
@endif

Просто чтобы убедиться, что я все правильно понимаю: мне нужно будет добавить входные данные в базу данных, чтобы сохранить их при перенаправлении? Нет другого простого способа достичь того, что я пытаюсь сделать, верно?

JohnyJohnson 31.10.2018 13:08

Редирект обычно используется в method-post, да, я думаю, что это самый простой способ сохранить данные в БД, пожалуйста, прочтите больше о HTTP-перенаправлении laravel.com/docs/5.7/redirects

Vpa 31.10.2018 13:12

Спасибо за ответ, я сохраню его для дальнейшего использования, как только я перейду к следующему шагу (который сохраняет данные публикации в БД), это наверняка будет очень полезно! Прямо сейчас я просто пытался убедиться, что входные данные сохраняются методом post, не сохраняя их в db, следовательно, это эхо с данными POST. Любой способ добиться этого?

JohnyJohnson 31.10.2018 13:18

Я никогда не слышал о том, что входные данные сохраняются методом post, может я слишком тупой .. Вы хотите, чтобы входные данные проходили через контроллер, а затем возвращались на страницу с флэш-сообщением?

Vpa 31.10.2018 13:21

Да, это было то, что я имел в виду. Если это невозможно, то моя проблема, и я перейду к следующему шагу с сохранением в БД.

JohnyJohnson 31.10.2018 13:22

Это пример прошивки / печати сообщения success/error в документации laravel.com/docs/5.7/…

Vpa 31.10.2018 13:22

Вы можете хранить внутри переменной, но не сохранять. И вы также можете использовать. Но попробуйте сделать сохранение в БД автоматически, и вы поймете лучше

Vpa 31.10.2018 13:23

Спасибо, но то, что я имею в виду под сохранением, на данный момент сохраняется в переменной. Я пытаюсь повторить "IN", если установлен POST, но это никогда не срабатывает. Это моя проблема

JohnyJohnson 31.10.2018 13:30

Если вы хотите проверить данные из БД, вам нужно вызвать метод get(), после этого ваш echo "in" будет работать (если данные есть) .Если вы просто хотите сохранить как переменную, вам нужно записать другое условие в echo, сообщение

Vpa 31.10.2018 13:33
<form id="forms" method="POST" action="{{ route('sugestoes') }}" novalidate>
 {{ csrf_field() }}
<div class="form-row">

<div class="form-group col-md-12">
  <label for="obs">Observações:</label>
  <textarea type="text" class="form-control" name="obs" placeholder="Observações" required></textarea>
 </div>

</div>



   <button type="submit" class="btn btn-primary">Enviar</button>

  </form>

Удалите тег @php под формой, затем в router.php

Route::post('/sugestoes', 'PostController@store')->name('sugestoes');

Затем в контроллере:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class PostController extends Controller
{

public function store(Request $request)
{
    $name = $request->input('obs');

   return redirect('/sugestoes'); // you should have GET in Route.php


    //
  }
}

Спасибо за ответ. У меня есть теги php под формой, чтобы проверить, работает ли она. Может я чего то упускаю ..? Тем не менее, я попробовал ваши советы, и результат тот же: меня перенаправляют на пустую форму (как и предполагалось), но нет никаких указаний на то, что то, что я отправил ранее, было сохранено в $ _POST.

JohnyJohnson 31.10.2018 13:37

Другие вопросы по теме