将视图名称添加到Body上的CSS类

Mat*_*att 4 php laravel

我正在寻找一种方法来回显视图名称,并将其作为CSS类放入body标记内的主模板中.

原因是我有一些页面需要更改某些CSS元素,但内联代码效率低下,我真的不想为该页面制作专用视图.

因此,例如,如果我要登陆主页,那么正文标记将是:

<body class="home">
Run Code Online (Sandbox Code Playgroud)

如果我要去关于我们的页面,它将改为:

<body class="about">
Run Code Online (Sandbox Code Playgroud)

Stu*_*art 8

添加到过滤器(或路线):

View::composer('*', function($view){
    View::share('view_name', $view->getName());
}); 
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用访问视图名称 $view_name


小智 6

尝试这个:

<body class="@yield('class')">
Run Code Online (Sandbox Code Playgroud)

以及你的看法

@section('class', 'Your boddy class')
Run Code Online (Sandbox Code Playgroud)


Shy*_*aru 5

在您的控制器中使用它

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

    View::share('view_name', $view->getName());

});
Run Code Online (Sandbox Code Playgroud)

在您的视图页面中使用它

<body class="{{$view_name}}">
Run Code Online (Sandbox Code Playgroud)


Gar*_*amb 5

打开您的AppServiceProvider类、boot()方法并插入以下代码:

View::composer('*', function ($view) {
    $view_name = str_replace('.', ' ', $view->getName());
    View::share('view_name', $view_name);
});
Run Code Online (Sandbox Code Playgroud)

$view_name然后您可以在视图中访问变量。

关于@Stuart的答案, use$view->getName()将返回带有点符号的精确视图路径。例如,您的视图位于resources/views/settings/index目录下,您的视图名称为:settings.index

那么呢?类名将包含dot字符,这意味着在编写 CSS 时会更加混乱。请参阅此线程: 在类名中使用点 (.) 设计元素样式

通过替换.为空格,上面示例中的类名将变为settings index,您可以使用.settings选择器,或.index选择器,或.setting.index选择器。

自定义类名

上面的方法是自动生成类名的,有很多方法:

@yield()@section()

<body class="@yield('body-class')">
Run Code Online (Sandbox Code Playgroud)

那么在你看来:

@section('body-class', 'your-class-name')
Run Code Online (Sandbox Code Playgroud)

@stack()@push()

从 Laravel 5.4 开始,您可以使用@stack@push,这允许您根据需要推送任意数量的时间。

<body class="@stack('body-class')">
Run Code Online (Sandbox Code Playgroud)

那么在你看来

@push('body-class', 'your-class-name')
@push('body-class', ' another-class-name')
Run Code Online (Sandbox Code Playgroud)