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

如何自动将应用程序区域设置设置为我的所有laravel路线的前缀?

姚丰羽
2023-03-14

我试图以自动方式获取所有路由的实际应用程序区域设置作为前缀,每次调用这样的路由时,我都将其作为参数:

web.php

Route::group(['prefix' => '{language}'], function() {

    Route::get(__('contact'), function () {
        return view('pages.contact');
    })->name('contact');

});

标题。刀身php

<li class="nav-item">
 <a class="nav-link" href="{{route('contact', app()->getLocale())}}">@lang('contact')</a>
</li>

这实际上是工作的,它显示en_US/联系例如,有没有一种方法来避免在路由呼叫上给出区域设置?

编辑:在回答了一些问题后,我按照这里的文档进行了操作https://laravel.com/docs/5.8/urls#default-值,因此我的代码如下所示:

中间件:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\URL;

class SetDefaultLocaleForUrls
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        URL::defaults(['locale' => app()->getLocale()]);
        return $next($request);
    }
}

内核php:

 protected $routeMiddleware = [
....
'locale' => \App\Http\Middleware\SetDefaultLocaleForUrls::class,
....
];

web.php:

Route::group(['prefix' => '{locale}', 'middleware' => 'locale'], function () {
    Route::get(__('contact'), function () {
            return view('pages.welcome');
        })->name('contact');
});

但还需要告诉Locale我做错了什么?

"Missing required parameters for [Route: contact] [URI: {locale}/contact]"

EDIT2:注意到中间件只在我在URL上设置locale参数时起作用,如果我不编写它,它不会触发,可能是错误

共有1个答案

汲永嘉
2023-03-14

您可以使用url::defaults()方法设置url的默认值。您可以将其放入中间件中,使其适用于所有路由。

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\URL;

class SetDefaultLocaleForUrls
{
    public function handle($request, Closure $next)
    {
        URL::defaults(['locale' => $request->user()->locale]);

        return $next($request);
    }
}

这里的文档中提到:https://laravel.com/docs/5.8/urls#default-价值观

 类似资料:
  • 我想强制我的Symfony 2.5应用程序的区域设置为。我希望这个区域设置用于strftime()函数。 我的: 我正在我的一个控制器中使用以下代码来调试: 当这样执行时,它显示:。 但是,当第一行未注释时,它会显示:,因此区域设置已安装在系统中并正常工作。 我如何使Symfony始终使用配置中指定的语言环境? $locale-a:

  • 我在azure portal中为Cosmos帐户启用了多写功能。我不明白是否也必须使用SDK来设置ApplicationRegion?如果是强制的,这个属性的目的是什么?我看到了下面的文档,但我仍然不清楚。 文档

  • 我创建laravel项目,在我的本地Windows电脑上工作良好。一旦我上传到Centos7服务器(通过SSH),我的所有路由都不工作。我试图通过行动修复,例如清除缓存,删除供应商文件夹和重做安装作曲家,但没有任何帮助。我从下面的日志中抓取。 [2018-12-20 13:09:17]本地的。错误:逻辑异常:无法为序列化准备路由[api/user]。在 /var/www/html/srp/vend

  • 内刀片-。 在。 如果我跑: 我得到正确的欢迎刀片页面与正确的翻译。 另一条路线: 如果我运行

  • 我在我的注解里有。yaml使用注释管线设置的以下设置: 我这里的问题是,我可以创建一个像是否不带区域设置前缀? 这是保护区,我可以使用用户语言。我尝试使用这个symfony路由文档,但我希望保留注释。 目前它看起来像,但我希望。