【问题标题】:Laravel5 RouteServiceProvider not workingLaravel5 RouteServiceProvider 不工作
【发布时间】:2016-01-14 00:13:58
【问题描述】:

你能帮我解决我的问题吗?我正在使用 laravel5 App/Providers/RouteServiceProvider。我正在尝试根据当前语言添加到路由前缀。例如。: 我有routes.php,像这样的路线在哪里:

/blog
/home

我需要这样做: 我的网址是例如:

/en/blog

我从 url 获得“lang”,我想添加路由前缀,以将其与我的路由匹配。所以它会做某事。像这样:

$router->group(['namespace' => $this->namespace, 'prefix' => $locale], function($router) {
            require app_path('Http/routes.php');
});

我不知道为什么,但它不起作用......如果url是/en/blog,它不匹配任何路由,无论如何它应该...... 我还尝试更改命名空间,并在某些控制器方法中执行此操作:

die(print_r(Route::getCurrentRoute()));

但所有路由的命名空间为:App\Controllers

你有什么想法,为什么它不起作用?

在我看来,RouteServiceProvider 没有加载,因为当我尝试输入方法 map 或方法 boot die('smth'); 时,它什么也没做......

这是我的路线服务提供商:

<?php namespace App\Providers;

use Illuminate\Routing\Router;
use Illuminate\Http\Request;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;

class RouteServiceProvider extends ServiceProvider {

    /**
     * This namespace is applied to the controller routes in your routes file.
     *
     * In addition, it is set as the URL generator's root namespace.
     *
     * @var string
     */
    protected $namespace = 'App\Http\Controllers';

    /**
     * Define your route model bindings, pattern filters, etc.
     *
     * @param  \Illuminate\Routing\Router  $router
     * @return void
     */
    public function boot(Router $router)
    {
        parent::boot($router);

        //
    }

    /**
     * Define the routes for the application.
     *
     * @return void
     */
    public function map(Router $router, Request $request)
    {
        $locale = $request->segment(1);
        $this->app->setLocale($locale);

        $router->group(['namespace' => $this->namespace, 'prefix' => $locale], function($router) {
            require app_path('Http/routes.php');
        });
    }

}

【问题讨论】:

    标签: php routes laravel-5 laravel-routing


    【解决方案1】:

    嘿,我看到没有人回答您的问题,我不知道您是否已将此标记为已解决,但根据我所知道的:

    • 为了重现您的问题,我运行了php artisan route:cache

    这意味着 Laravel 正在查看存储的路由缓存,而不是您更改的 routes.php 或路由服务提供程序文件。

    这意味着当我更改 RouteServiceProvider.php 中的地图功能时,什么都不会发生

    public function map(Router $router, Request $request)
    {
        /*
        $locale = $request->segment(1);
        $this->app->setLocale($locale);
    
        $router->group(['namespace' => $this->namespace, 'prefix' => $locale], function($router) {
            require app_path('Http/routes.php');
        });
        */
    
    }
    

    您可能已经通过重新启动服务器解决了您的问题,但是,特定的供应商文件可能正在为您缓存路由。

    • 所以为了清除缓存只需运行php artisan route:clear

    之后对您的RouteServiceProvider.php 文件的所有更改都应该立即生效。所以你可以访问/en,但为了强制前缀,你需要在语言中间件中添加。

    四处搜索我认为您正在使用the laracast blogs multiple locales post

    • 所以你仍然需要使用php artisan make:middleware Language创建一个中间件并改变它的handle()函数

    之后只需将语言中间件添加到 Kernel.php 以强制 Laravel 将您路由到 /en

    protected $middleware = [
        'App\Http\Middleware\Language'
    ];
    

    希望能解决你的问题,迟到总比没有好

    【讨论】:

      猜你喜欢
      • 2018-01-20
      • 2016-12-31
      • 2017-07-27
      • 2015-06-05
      • 2017-04-04
      • 2023-03-24
      • 2016-05-12
      • 2016-03-29
      • 1970-01-01
      相关资源
      最近更新 更多