Laravel 5 获取视图名称

2022-08-30 20:50:13

我正在努力在L5中获取视图名称。就像在WP中一样,我想添加一个特定的页面名称(视图名称)用于样式设置,如下所示:

<!-- View name: login.blade.php !-->
<div id="page" class="page-login">
    <h1>Inloggen</h1>
</div>

<!-- View name: register.blade.php !-->
<div id="page" class="page-register">
    <h1>Registreren</h1>
</div>

在L4中,可以使用作曲家在所有视图中共享var来完成(如何在Laravel 4中的主布局中获取当前视图名称?但是我只需要一次视图名称作为我的主布局。

这样做:

<div id="page" class="page-{{ view()->getName() }}">

给我以下错误。Call to undefined method Illuminate\View\Factory::getName()

提前致谢!


答案 1

通过将视图编辑器添加到引导方法并使用“*”与所有视图共享来更新 AppServiceProvider:

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;    

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        view()->composer('*', function($view){
            $view_name = str_replace('.', '-', $view->getName());
            view()->share('view_name', $view_name);
        });

    }

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

{{$view_name}}将可用于边栏选项卡模板。


答案 2

根据@motto答案,我能够在眨眼间获得刀片文件。

find()是类中搜索视图、路径和命名空间的函数。ViewFileFinder

然后分解回车符以获取文件名。 是 laravel 中的一个辅助函数。last()

@php
   $view1 = View::getFinder()->find('login');
   $page_login= last(explode('/', $view)); // this return login.blade.php
   $view2 = View::getFinder()->find('register');
   $page_register= last(explode('/', $view)); // this return register.blade.php
@endphp

@if($page_login == 'login.blade.php')
<!-- View name: login.blade.php !-->
<div id="page" class="page-login">
    <h1>Inloggen</h1>
</div>
@endif

@if($page_register == 'register.blade.php')
<!-- View name: register.blade.php !-->
<div id="page" class="page-register">
    <h1>Registreren</h1>
</div>
@endif

推荐