我有一个API终结点,用户可以将其发布到
Route::post('report', 'Auth\ReportController@report')
因为它仅支持POST请求,所以如果用户转到mydomain.com/api/report
,则会收到错误消息
此路由不支持GET方法。
我不希望用户能够在其地址栏中键入此内容并收到此错误。因此,我获得了重定向到首页的信息
Route::get('report', function () {
return redirect('home');
});
这是处理此问题的正确方法吗?有没有更优雅的解决方案?另外,是否可以列出多条路线并将它们全部重定向到首页,例如:
Route::get(['report', 'issuer'], function () {
return redirect('home');
});
答案 0 :(得分:1)
更优雅:
Route::permanentRedirect('/report', '/home');
更好的方法可能是为您的API使用API路由,如果将您的API路由放置在route / api.php中,它将自动为它们添加/ api / [route]
前缀要将路由列表重定向到本地,请在底部使用通配符路由,然后在控制器中定义重定向。
答案 1 :(得分:0)
我强烈建议您不要使用它,因为对于不允许使用API的方法的405消息对API使用者和许多人都非常有用。
但是,如果必须执行此操作,建议您使用异常处理程序
App\Exceptions\Handler
(可在https://github.com/laravel/laravel/blob/master/app/Exceptions/Handler.php中看到laravel随附的样板)
use Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException;
class Handler extends ExceptionHandler
{
public function render($request, Exception $exception)
{
if (!$request->expectsJson() && $exception instanceof MethodNotAllowedHttpException) {
return redirect('home');
}
return parent::render($request, $exception);
}
}
这将导致所有MethodNotAllowedHttpException
都重定向到首页。
请注意,我还使用条件!$request->expectsJson()
,因为期望JSON的客户端通常不希望知道重定向,而是希望收到真实状态代码的通知