[英]Middleware to redirect users if they type POST route in URL Laravel
截至目前,当我的用户在URL中键入POST路由时,它显示一条错误,指出The GET method is not supported for this route. Supported methods: 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路由,我会将其重定向到主页。
在这种情况下,在执行请求分配管道之前抛出了异常,因此,您的中间件功能将不会被执行。 无需使用中间件,您可以处理异常以归档目标
public function render($request, Exception $exception)
{
if($exception instanceof MethodNotAllowedHttpException && $request->isMethod('POST')){
return redirect('/');
}
return parent::render($request, $exception);
}
我已将以上代码添加到laravel App\\Exceptions\\Handler.php
文件中
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.