在 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 中重定向路由的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 中重定向域名

laravel 路由重定向问题(laravel 5.3)

如何在 Vue 3 中重定向另一个路由器? (在 Laravel 8 中使用 next.router 和 vue 3)

如何使用获取参数将 laravel (5.3) 路由重定向到其他路由

维护模式与中间件在 Laravel 中重定向

在 Laravel 5.8 中的 htaccess 中重定向 [重复]