gpt4 book ai didi

php - Laravel5 RouteServiceProvider 不工作

转载 作者:搜寻专家 更新时间:2023-10-31 21:56:25 26 4
gpt4 key购买 nike

你能帮我解决我的问题吗?我正在使用 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,它不匹配任何路由,无论如何它应该......我还尝试更改命名空间,并在某些 Controller 方法中执行此操作:

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 但为了强制你需要在语言中间件中添加的前缀。

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

  • 因此您仍然需要使用 php artisan make:middleware Language 创建一个中间件并更改其 handle() 函数

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

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

希望这能解决你的问题,迟到总比不到好

关于php - Laravel5 RouteServiceProvider 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33150202/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com