如何修复'此路由不支持POST方法。支持的方法:GET,HEAD。

时间:2019-05-15 12:39:08

标签: php database laravel

我正在尝试建立一个网站,您可以在其中上传游戏并在主页上看到它们,但是由于我需要两步表单,因此无法直接将它们发送到数据库。

我的控制器:

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 :(得分:0)

注册新路由时,您需要指定该路由所针对的HTTP方法。通常Route::get()没问题,但是由于您要通过表单向控制器方法POST发送一个postcreatestep1请求,因此该请求需要通过Route::post()注册为POST路由

您还可以使用Route::match()方法声明可用于多个HTTP方法的路由。

要获得all available router methods的概述,Laravel的正式文档是一个很好的起点。