将css文件包含在调用控制器方法的视图的标题中

时间:2017-05-19 20:31:31

标签: php laravel

基本上我要做的是在一个单独的视图中将控制器生成的一小部分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]);
}

我不知道是否可能这就是我所要求的。或者如果你对如何实现这一目标有更好的想法,我会非常感激!

1 个答案:

答案 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