Php Laravel 5.1-如何动态为所有已注册的路由添加前缀

Php Laravel 5.1-如何动态为所有已注册的路由添加前缀,php,laravel,laravel-5,laravel-routing,Php,Laravel,Laravel 5,Laravel Routing,TL;DR:如何为所有已注册的Laravel路线添加前缀? 详细信息: -带有第三方软件包的大型Laravel 5.1应用程序,每个 注册自己的路线。 -对于某些多语言支持,所有路由都必须加前缀,而无需修改这些第三方包。 -正如您在Laravel 5.1中所知道的,路由器服务很早就被绑定了 甚至在调用自定义服务提供商之前,如果路由器 应用程序将有一个分离的路由器。 -那么,我们如何为所有当前注册的路由添加前缀呢? -如果没有直截了当的解决方案,换句话说:如何替换默认的\Lightning\Rou

TL;DR:如何为所有已注册的Laravel路线添加前缀?

详细信息: -带有第三方软件包的大型Laravel 5.1应用程序,每个 注册自己的路线。 -对于某些多语言支持,所有路由都必须加前缀,而无需修改这些第三方包。 -正如您在Laravel 5.1中所知道的,路由器服务很早就被绑定了 甚至在调用自定义服务提供商之前,如果路由器 应用程序将有一个分离的路由器。 -那么,我们如何为所有当前注册的路由添加前缀呢?
-如果没有直截了当的解决方案,换句话说:如何替换默认的\Lightning\Routing\Router\Router::prefix(),这似乎是一个可能的解决方案。

您没有发布您尝试的代码片段,但似乎您正在寻找,这允许您添加前缀,对于一系列已定义的路由,可以轻松地使用中间件和其他工具


如果您仍然需要向路由类添加逻辑,您可能希望

在不破坏第三方软件包的情况下获得多语言支持的最佳选择是从public/index.php中的请求URI中删除区域设置slug

$pattern = '/^\/(en|fr)\//';
$uri = filter_input(INPUT_SERVER, 'REQUEST_URI', FILTER_SANITIZE_URL);

if (preg_match($pattern, $uri, $matches)) {
    $uri = preg_replace($pattern, '/', $uri);

    $_SERVER['REQUEST_URI'] = $uri;

    define('LOCALE', $matches[1]);
}
有一位Laravel软件包语言学家正是这样做的,他帮助为多语言环境生成URL和html锚定标记


我知道我有点晚了,但在
Laravel 5.4
中,我们可以实现以下目标:

步骤1创建包并在其中创建服务提供商

步骤2在laravel配置应用程序中注册您的套餐服务提供商

步骤3现在创建一个单独的routes服务提供商,其中将包含以下内容

namespace MyPackage\Providers;


use App\Providers\RouteServiceProvider;
use Illuminate\Support\Facades\Route;

class MyPackageRouteServiceProvider extends RouteServiceProvider
{
    protected $namespace='MyPackage\Controllers';

    public function boot()
    {
        parent::boot();
    }

    public function map()
    {
        $this->mapApiRoutes();

        $this->mapWebRoutes();
    }


    protected function mapApiRoutes()
    {
    Route::prefix('Mypackage\api')
        ->middleware('api')
        ->namespace($this->namespace)
        ->group(__DIR__ . '\..\Routes\api.php');
    }

    protected function mapWebRoutes()
    {
        Route::prefix('Mypackage')
            ->middleware('web')
            ->namespace($this->namespace)
            ->group(__DIR__ . '\..\Routes\web.php');
    }
}
注意:我正在考虑是否有
Routes文件夹
并包含
web.php
api.php
文件。根据您的问题,您希望动态加载它,您可以使用构造函数并根据您的需要传递
包名
前缀
命名空间

步骤4现在最后一步是注册服务提供商,您可以在套餐服务提供商中调用类似的内容:

public function boot()
{
    $this->app->register('Mypackage\Providers\MyPackageRouteServiceProvider');
}

希望这能帮助别人。Cheers

在laravel中没有答案,但您可以使用.htaccess mod rewrite将所有路由的前缀重新写入URL,从而欺骗所有这一切。Laravel这样做是为了摆脱index.php。谢谢,但目前这不是可接受的解决方案。需要基于应用程序的解决方案,而不是服务器解决方案。正如我上面所说的,我不需要与第三方路由组打交道,我想动态地为它们添加前缀。所有所需路由的静态应用程序范围前缀。然而,不需要代码片段,这是一个通用的情况:如何为所有已注册的路由添加前缀?