小编Vus*_*sys的帖子

Laravel:如何设置全局可用的默认路由参数

我正在尝试设置一些默认路由参数,无论上下文如何,它们都将在我的应用程序中全局运行。在用于生成URL文档中,给出的示例使用的是中间件,该中间件对HTTP很好,但是在非HTTP上下文中不会被调用。从CLI调用时,我也需要此功能。

我的第一个想法是让服务提供商defaults在启动时调用该方法:

<?php

namespace App\Providers;

use Illuminate\Routing\UrlGenerator;
use Illuminate\Support\ServiceProvider;

class UrlDefaults extends ServiceProvider
{
    public function boot(UrlGenerator $urlGenerator): void
    {
        $urlGenerator->defaults([
            'foo' => 'abc',
            'bar' => 'xyz',
        ]);
    }
}
Run Code Online (Sandbox Code Playgroud)

但这不适用于HTTP请求:

Route::get('test', function (\Illuminate\Routing\UrlGenerator $urlGenerator) {
    dump($urlGenerator->getDefaultParameters());
});
Run Code Online (Sandbox Code Playgroud)

产出 []

我相信这是因为在中UrlGeneratorsetRequest方法无条件地将routeGenerator属性设置为null。在引导过程中会调用我的服务提供者的引导方法,但随后设置请求将破坏我的默认设置。

//Illuminate/Routing/UrlGenerator.php

    public function setRequest(Request $request)
    {
        $this->request = $request;

        $this->cachedRoot = null;
        $this->cachedSchema = null;
        $this->routeGenerator = null;
    }
Run Code Online (Sandbox Code Playgroud)

转储UrlGenerator期间boot,然后再转储到我的路线文件中,可以证明这一点:

网址生成器

如您所见, …

php laravel

6
推荐指数
1
解决办法
261
查看次数

标签 统计

laravel ×1

php ×1