Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel5路由服务提供商不工作_Php_Routes_Laravel 5_Laravel Routing - Fatal编程技术网

Php Laravel5路由服务提供商不工作

Php Laravel5路由服务提供商不工作,php,routes,laravel-5,laravel-routing,Php,Routes,Laravel 5,Laravel Routing,你能帮我解决我的问题吗?我正在与laravel5App/Providers/RouteServiceProvider合作。我正在尝试根据当前语言添加路由前缀。例如: 我有routes.php,其中有如下路由: /blog /home 我需要这样做: 例如,我的url是: /en/blog 我从url中得到“lang”,我想添加路由前缀,以便与我的路由匹配。因此,它将做smth。像这样: $router->group(['namespace' => $this->namesp

你能帮我解决我的问题吗?我正在与laravel5
App/Providers/RouteServiceProvider
合作。我正在尝试根据当前语言添加路由前缀。例如: 我有routes.php,其中有如下路由:

/blog
/home
我需要这样做: 例如,我的url是:

/en/blog
我从url中得到“lang”,我想添加路由前缀,以便与我的路由匹配。因此,它将做smth。像这样:

$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-artisan-route:cache
这意味着Laravel正在查看路由的存储缓存,而不是您更改的routes.php或路由服务提供程序文件

这意味着当我在
RouteServiceProvider.php
中更改map函数时,什么都不会发生

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
,但为了强制使用前缀,您需要在语言中间件中添加前缀

四处搜寻我想你是在工作

  • 因此,您仍然需要使用
    php artisan make:middleware Language
    创建一个中间件,并更改其handle()函数
之后,只需将语言中间件添加到
Kernel.php
,以强制Laravel将您路由到
/en

protected $middleware = [
    'App\Http\Middleware\Language'
];
希望这能解决你的问题,迟做总比不做好