基本上我要做的是在一个单独的视图中将控制器生成的一小部分html实现到一个主视图中。问题是我需要为那一小块html定制样式,我不知道在哪里我必须包含它(手动),所以我希望css被附加到文件中以某种方式调用函数调用方法时的控制器。
更详细的解释:
我以编程方式列出了小型自定义面板,以显示我的模型的每个实例的某些属性(在本例中为一个窗口)。在我正在列出的主视图中,有很多,所以我决定创建一个单独的视图文件来创建面板,然后通过控制器中的函数返回它。
所以在home.blade.php
我做如下:
@foreach($order -> windows as $window)
{!!$window->drawPanel()!!}
@endforeach
然后在我的Window控制器中,我有一个方法来返回显示窗口的视图(!不同地依赖于它的属性!),如下所示:
public function drawPanel()
{
return view('dogrami.windowPanelThumbnail', ['window' => $this]);
}
然后在windowPanelThumbnail
文件中我相应地显示了所需的html。问题是:构建我的面板,我使用一些自定义的css,我不能在构建器视图中包含它,因为它被调用100次。
问题是 - 如何将样式附加到控制器中调用方法的文件。
基本上我想做的如下:
public function drawPanel()
{
//$cssFile = pathToMyCssFile;//that's the instance containing my custom css
//$callingFile = ...//somehow retrieve an instance to the file that called that method.. in this case - the path to 'home.blade.php'
//if($calling.File already has the $cssFile included in it's header)
//don't do anything
//else
//$callingFile -> somehow include the $cssFile instance in the header
return view('dogrami.windowPanelThumbnail', ['window' => $this]);
}
我不知道是否可能这就是我所要求的。或者如果你对如何实现这一目标有更好的想法,我会非常感激!
答案 0 :(得分:0)
如果要动态包含css,可以这样使用堆栈https://laravel.com/docs/5.4/blade#stacks:
$links = ["all", "the", "links", "to", "css", "files"];
return view('yourview', [/*allyourdata, */, 'stylesheets' => $links]);
在您看来,您可以这样做:
@push('stylesheets')
@foreach($stylesheets as $stylesheet)
<link rel="stylesheet" type="text/css" href="{{ $stylesheet }}">
@endforeach
@endpush
在你的html
的头部添加@stack('stylesheets')
PS:堆栈是一个lifo数据结构(后进先出),这意味着如果你做了几个@push,你做的最后一个将是第一个echo'ed