有没有办法向Laravel 5.5项目的每个渲染视图添加内容?我想要一个Composer包,例如为每个渲染视图添加一些JavaScript代码,而不对实际项目代码进行任何修改。
现在我已经通过创建视图到包并将其包含到我的布局标题中来实现这一点,但如果没有手动包含可以以某种方式完成它会更好。
答案 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) {
//
});