Laravel 将内容添加到每个渲染视图

lin*_*ngo 0 php laravel laravel-5 laravel-middleware laravel-blade

有没有办法将内容添加到 Laravel 5.5 项目的每个渲染视图中?我想要一个 Composer 包,例如,它将一些 JavaScript 代码添加到每个渲染的视图中,而不需要对实际项目代码进行任何修改。

现在,我已经通过在包中创建视图并将其包含到我的布局标题中来实现这一点,但如果可以在不手动包含的情况下以某种方式完成此操作,那就更好了。

Mar*_*łek 5

您可以为此使用中间件。您可以修改响应添加任何您想要的代码段,例如此代码在</head>运行测试时在 html 中添加额外的代码段:

public function handle($request, Closure $next, $guard = null)
{
    /** @var Response $response */
    $response = $next($request);
    if ($response instanceof Response && app()->runningUnitTests() &&
        str_contains($response->headers->get('Content-Type'), 'text/html')) {
        $content = $response->getContent();
        if (($head = mb_strpos($content, '</head>')) !== false) {
            $response->setContent(mb_substr($content, 0, $head) .
                '<style>' . $this->config->get('laravel_test_css.style') . '</style>' .
                mb_substr($content, $head));
        }
    }
    return $response;
}
Run Code Online (Sandbox Code Playgroud)

(这是我的中间件的一段代码 - 完整文件 - https://github.com/mnabialek/laravel-test-css/blob/master/src/Middleware/LaravelTestCss.php

如果你想在全球范围内应用这个中间件,你可以这样做:

app('Illuminate\Contracts\Http\Kernel')->pushMiddleware(CustomMiddleware::class);
Run Code Online (Sandbox Code Playgroud)