Laravel为每个渲染视图添加内容

时间:2017-12-21 20:26:35

标签: php laravel laravel-5 blade laravel-middleware

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

现在我已经通过创建视图到包并将其包含到我的布局标题中来实现这一点,但如果没有手动包含可以以某种方式完成它会更好。

2 个答案:

答案 0 :(得分:2)

您可以使用中间件。您可以修改响应,添加您想要的任何代码,例如,此代码在运行测试时在html Public Sub example() Application.DisplayAlerts = False Application.EnableEvents = False For Each element In sArray XLSMToXLSX(element) Next element Application.DisplayAlerts = False Application.EnableEvents = False End Sub Sub XLSMToXLSX(ByVal file As String) Do While WorkFile <> "" If Right(WorkFile, 4) <> "xlsx" Then Workbooks.Open Filename:=myPath & WorkFile Application.DisplayAlerts = False Application.EnableEvents = False ActiveWorkbook.SaveAs Filename:= _ modifiedFileName, FileFormat:= _ xlOpenXMLWorkbook, CreateBackup:=False, _ ConflictResolution:=xlLocalSessionChanges Application.DisplayAlerts = True Application.EnableEvents = True ActiveWorkbook.Close End If WorkFile = Dir() Loop End Sub 之前添加额外的代码片段:

</head>

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

如果您想在全球范围内应用此中间件,可以执行以下操作:

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;
}

答案 1 :(得分:0)

  

有时,您可能需要与应用程序呈现的所有视图共享一段数据。您可以使用view facade的share方法执行此操作。通常,您应该在服务提供程序的引导方法中进行共享调用。您可以自由地将它们添加到AppServiceProvider或生成一个单独的服务提供商来容纳它们

https://laravel.com/docs/5.5/views#sharing-data-with-all-views

或者您可以使用视图编辑器:

  

作曲家方法还接受*字符作为通配符,允许您将作曲家附加到所有视图:

View::composer('*', function ($view) {
    //
});

https://laravel.com/docs/5.5/views#view-composers