【发布时间】:2019-07-28 08:18:07
【问题描述】:
到目前为止,当我的用户在 URL 中输入 POST 路由时,它会显示错误消息 The GET method is not supported for this route. Supported methods: POST.。我想编写一个中间件,如果他们尝试去任何 POST 路由,它将重定向用户。我尝试过以下操作:
我创建了一个RedirectIfPOST 中间件。这是它的代码:
<?php
namespace App\Http\Middleware;
use Closure;
class RedirectIfPOST
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
// Redirect if user tries accessing a POST route.
return redirect('/');
}
}
在我的Kernel.php 中,我将以下代码行添加到$routeMiddleware 数组中:
'post' => \App\Http\Middleware\RedirectIfPOST::class,
最后在我的web.php 中,我将我的所有POST 路由分组到我的中间件中,如下所示:
Route::group( ['middleware' => 'post'],function()
{
Route::post('/signup', 'MainController@signup');
Route::post('/login', 'MainController@authenticate');
Route::post('/activate','ActiveController@activate');
});
如何解决此问题,以便将用户重定向到主页而不是看到错误?
编辑
我按照 Sherif Tarek 的建议做了以下操作:
我已经复制了我的POST 路线并制作了重复的路线GET。然后我将GET 路由分组到我的中间件中。所以现在我的web.php 看起来像这样:
Route::post('/signup', 'MainController@signup');
Route::post('/login', 'MainController@authenticate');
Route::post('/activate','ActiveController@activate');
Route::group( ['middleware' => 'post'],function()
{
Route::get('/signup', 'MainController@signup');
Route::get('/login', 'MainController@authenticate');
Route::get('/activate','ActiveController@activate');
});
这样,如果用户尝试通过 URL 访问 POST 路由,我会将他们重定向到主页。
【问题讨论】: