在 Laravel 5.3 中重定向路由
Posted
技术标签:
【中文标题】在 Laravel 5.3 中重定向路由【英文标题】:Redirect a route in Laravel 5.3 【发布时间】:2017-04-12 07:01:57 【问题描述】:我正在 Laravel 5.3 中构建一个 API。在我的routes/api.php
文件中,我有 3 个端点:
Route::post('/notify/v1/notifications', 'Api\Notify\v1\NotifyApiController@notificationsPost');
Route::post('/notify/v1/alerts', 'Api\Notify\v1\NotifyApiController@alertsPost');
Route::post('/notify/v1/incidents', 'Api\Notify\v1\NotifyApiController@incidentsPost');
一些服务会直接调用这些路由,但是,当一些服务有请求时,需要处理输入数据才能到达这些端点。
例如,如果一个请求来自 JIRA,我需要在输入到达这些端点之前对其进行处理。
我认为最简单的方法是使用如下所示的第四个端点:
Route::post('/notify/v1/jira', 'Api\Notify\v1\JiraFormatter@formatJiraPost');
想法是点击/notify/v1/jira
端点,让formatJiraPost
方法处理输入,然后根据需要将请求转发到/notify/v1/notifications (/alerts, /incidents)
。
如何让/notify/v1/jira
端点将请求转发到/notify/v1/notifications
端点?
您有没有更好的方法来做到这一点?
【问题讨论】:
您可以使用中间件来格式化您的请求数据,然后将其转发到同一个端点,而无需第四个。 同意@TheFallen。使用中间件检查“预处理要求”可能是您更好的选择。虽然,要考虑的一件事是将所有 3 个端点包装在一个中间件中可能会增加一些执行时间开销。由于“检查所有请求”以查看它们是否需要预处理。 【参考方案1】:根据您的应用程序的工作方式,您始终可以让您的服务指向/notify/v1/jira
,然后按照您的建议进行处理。
另一种选择是让 JIRA 服务指向与所有其他服务相同的路由,但使用Before middleware group 来预处理您的数据。类似的东西
Route::group(['middleware' => ['verifyService']], function ()
Route::post('/notify/v1/notifications', 'Api\Notify\v1\NotifyApiController@notificationsPost');
Route::post('/notify/v1/alerts', 'Api\Notify\v1\NotifyApiController@alertsPost');
Route::post('/notify/v1/incidents', 'Api\Notify\v1\NotifyApiController@incidentsPost');
);
您可以将中间件签入您的服务。
<?php
namespace App\Http\Middleware;
use Closure;
class verifyService
public function handle($request, Closure $next)
//You could use switch/break case structure
if (isJIRA($request))
//Do some processing, it could be outsourced to another class
//$JiraPost = new formatJiraPost($request);
//Keep the requesting going to the routes with processed data
return $next($request);
//You could add extra logic to check for more services.
return $next($request);
protected function isJIRA(Request $request)
//Logic to check if it is JIRA.
【讨论】:
以上是关于在 Laravel 5.3 中重定向路由的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Vue 3 中重定向另一个路由器? (在 Laravel 8 中使用 next.router 和 vue 3)