当前位置: 首页 > 知识库问答 >
问题:

Laravel路由组和前缀

张淳
2023-03-14

信息:我正在使用Larvel 6.1版。0,我希望我的网站支持不同的语言。因此,我创建了一个新的中间件,并希望为我的路由提供一个前缀,以便Laravel可以确定语言。也许有更好的方法,但这是我到目前为止所做的。

URL最终应该是这样的:

mywebsite.com/en/home, url/locale/home

用于设置区域设置的中间件

namespace App\Http\Middleware;

use Closure;

class SetLocale
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        app()->setLocale($request->segment(1));
        return $next($request);
    }
}

在内核中注册了新的中间件setlocale。php

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'setlocale' => \App\Http\Middleware\SetLocale::class,
    ];

我的网络。php

Route::group(['middleware' => ['setlocale'],'prefix' => '{locale}', 'where' => ['locale' => '[a-zA-Z]{2}']], function() {

Route::get('/', 'NewController@frontpage');
Route::get('/home', 'NewController@frontpage')->name("home");

Auth::routes();

});

由于某种原因,我的路由组中的前缀部分根本不起作用。当我进入我的网站。com/en/home在我的浏览器中

缺少[Route:login][URI:{locale}/login]所需的参数

这很奇怪,因为我没有请求登录路线,而是请求归属路线,我通过了一个区域。有人看到错误或有更好的主意来实现对Laravel版本6中几种语言的支持吗?

提前感谢。

共有1个答案

王庆
2023-03-14

你将需要采取Auth::路由()外路由组:

Route::group(['middleware' => ['setlocale'],'prefix' => '{locale}', 'where' => ['locale' => '[a-zA-Z]{2}']], function() {

    Route::get('/', 'NewController@frontpage');
    Route::get('/home', 'NewController@frontpage')->name("home");

});


Auth::routes();

该问题是由于{locale}前缀在/login路由(以及所有其他身份验证路由)前面而引起的。

 类似资料:
  • 我正在使用管理面板开发Laravel 5.0 Web应用程序。我正面临一个问题与路线。我有如下分组管理路线, 事情进展顺利。我可以毫无问题地使用跟随, 但是我想 显示登录页面或重定向到 所以我把第一组改成了第二组, 现在当我访问 我在chrome上看到“这个网页有一个重定向循环”。在路线组中可能吗?如果没有,如何使用.htaccess执行此操作? 更新 下面是中间件的方法。它只会更改身份验证的基础

  • 作为一个 web 后台框架,路由无疑是极其重要的一部分。本博客接下来几篇文章都将会围绕路由这一主题来展开讨论,分别讲述: 路由的使用 路由属性注册 路由的正则编译与匹配 路由的中间件 路由的控制器与参数绑定 RESTful 路由 和之前一样,第一篇将会利用单元测试样例说明我们在平时可能用到的 route 的 api 函数用法,后面几篇文章将会剖析 laravel 的 route 源码。下面开始介绍

  • 我正在尝试利用Laravel的登录页路径。例如,默认情况下,Laravel会将您带到欢迎页面,并且斜杠后没有url文本。 在我的欢迎页面中,我使用以下条件根据路线名称应用样式。 然而,此代码不工作。如何正确查看欢迎页面的路线? 编辑:使用“请求”而不是“路由”使其工作。然而,为了保持一致性,我想知道是否也可以使用“路线”来完成。

  • 我知道本身不会向路由表添加路由。在您的操作中,您需要声明属性。我很难找到一个权威的blog/msdn页面/说明为什么by defalut不在路由表中添加路由的东西。 有没有人有一个权威的帖子,确实包含了这种情况,如果是这样,你会让我知道是谁。非常感谢。 编辑以澄清我的问题 上面的场景之所以能够工作,是因为我们显式地声明了上的操作有一个空路由。一旦我们这样做,路由就被添加到 第一个场景不起作用,因为

  • 通过Group可以实现路由分组,Group 路由分组可以简化你的路由撰写: 有两种方法来使用Group: 第一种,创建Group对象,通过Group方法传入 g := tango.NewGroup() g.Get("/1", func() string { return "/1" }) g.Post("/2", func() string { return "/2" }) o :=

  • 利用 pipeline 进行中间件的层层处理后,接下来 laravel 就会利用请求的 url 来寻找与其对应的路由,laravel 采用对路由注册的 uri 进行正则编译,然后利用 request 的 url 进行正则匹配来寻找正确的路由。 前期准备 在上一篇文章中,我们了解了 Pipeline 的原理,我们知道它调用了 dispatchToRouter() 这个函数: protected fu