我正在寻找一种方法来回显视图名称,并将其作为CSS类放入body标记内的主模板中。
原因是我有一些页面需要更改某些CSS元素,但内联代码效率低下,而且我真的不想为该页面制作专用视图。
因此,例如,如果我要登陆主页,那么正文标记将是:
<body class="home">
如果我要转到关于我们的页面,它将改为:
<body class="about">
答案 0 :(得分:7)
添加到过滤器(或路线):
View::composer('*', function($view){
View::share('view_name', $view->getName());
});
然后,您可以使用$view_name
答案 1 :(得分:3)
在控制器中使用此功能
View::composer('*', function($view){
View::share('view_name', $view->getName());
});
在您的视图页面中使用此功能
<body class="{{$view_name}}">
答案 2 :(得分:2)
试试这个:
<body class="@yield('class')">
关于你的意见
@section('class', 'Your boddy class')
答案 3 :(得分:2)
打开AppServiceProvider
类,boot()
方法并插入此代码:
View::composer('*', function ($view) {
$view_name = str_replace('.', ' ', $view->getName());
View::share('view_name', $view_name);
});
然后,您可以在视图中访问$view_name
变量。
关于@Stuart答案,使用$view->getName()
将返回具有点表示法的精确视图路径。例如,您查看的位于resources/views/settings/index
目录下,您的视图名称为:settings.index
。
dot
字符意味着在编写CSS时更容易混淆。看到这个帖子:
Styling elements with a dot (.) in the class name
通过用空格替换.
,上面示例中的类名称将变为settings index
,您可以使用.settings
选择器,.index
选择器或{{1}选择器。
上面的方法是自动生成类名,你有很多方法:
.setting.index
和@yield()
@section()
然后在你的观点中:
<body class="@yield('body-class')">
@section('body-class', 'your-class-name')
和@stack()
从Laravel 5.4开始,您可以使用@push()
和@stack
,这样您就可以根据需要推送多少时间。
@push
然后在你的观点中
<body class="@stack('body-class')">
答案 4 :(得分:1)
您可以在控制器中(在contructor或action的方法中)轻松设置类名:
View::share('bodyClass', 'nameOfCertainClass');
然后:
<body class="{{$bodyClass or 'default}}'">