Как исправить 'Метод POST не поддерживается для этого маршрута. Поддерживаемые методы: GET, HEAD. '? - PullRequest
0 голосов
/ 15 мая 2019

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

мой контроллер:

public function createstep1(Request $request)
{
    $naam = $request->session()->get('naam');
    return view('games.game',compact('naam', $naam))->with('games',          game::all());
}

public function postcreatestep1(Request $request)
{
    $validatedData = $request->validate([
        'naam' => 'required',
        'geslacht' => 'required',
    ]);

    if(empty($request->session()->get('naam'))){
    return redirect('/game');
    }else{
        $naam = $request->session()->get('naam');
        $naam->fill($validatedData);
        $request->session()->put('naam', $naam);
    }
    return redirect('/newgame');
}

/**
 * Show the form for creating a new resource.
 *
 * @return \Illuminate\Http\Response
 */
public function create(Request $request)
{
    $naam = $request->session()->get('naam');
    return view('games.newgame',compact('naam',$naam));
}

/**
 * Store a newly created resource in storage.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return \Illuminate\Http\Response
 */
public function store(Request $request)
{
    $game= new Game();
    $game->game= $request['game'];
    $game->naam= $request['naam'];
    $game->geslacht= $request['geslacht'];
    $game->save();

    return redirect('/game');
}





<div id="newgame" style="height: 500px; width: 250px; float: left;">
<form method="post" name="naam">
    @csrf
<input id="naam" name="naam" placeholder="naam">
    <select name="geslacht" type="text">
        <option name="man">man</option>
        <option name="vrouw">vrouw</option>
    </select>
<a type="submit"><button>volgende</button></a>
</form>
</div>
<div id="games" style="float: right">
@foreach($games as $game)
    {{$game->game}} <br><br>
@endforeach
</div>




<h1>welkom {{$naam}}</h1>
<form method="post">
    @csrf
    <h3>game invoeren</h3>
    <input type="text" id="gamenaam" name="gamenaam" placeholder="game">
<a id="submit" type="post" name="game" href="/newgame/store">     
<button>verstuur</button></a>
</form>



Route::get('/', function () {
    return view('welcome');
});

Route::get('/newgame', function () {
    return view('games.newgame');
});

//Route::post('/newgames', ['as' => '/newgames', 'uses' => 'GameController@create']);

Route::get('/game', 'GameController@createstep1');
Route::post('/game', 'GameController@postcreatestep1');

Route::get('/newgame', 'GameController@create');
Route::post('/newgame/store', 'GameController@store');

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

1 Ответ

0 голосов
/ 15 мая 2019

При регистрации нового маршрута необходимо указать, для какого метода HTTP используется маршрут. Обычно с Route::get() все в порядке, но, поскольку вы отправляете запрос POST с вашей формой в метод контроллера postcreatestep1, этот запрос необходимо зарегистрировать как POST-маршрут с помощью Route::post().

Вы также можете объявить маршрут, доступный для нескольких методов HTTP, с помощью метода Route::match().

Чтобы получить обзор всех доступных методов маршрутизатора , официальная документация Laravel является хорошей отправной точкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...