Я пытаюсь получить имя вида в 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()
.
Заранее спасибо!
Обновите 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}}
будет доступно для ваших шаблонов {{$view_name}}
.
Единственное решение, которое я мог найти, это:
@foreach(View::getFinder()->views as $view=>$viewpath ) {{$view}} @endforeach
Это не совсем идеальное решение, но вам также нужны изменения в поставщике / laravel / framework / src / Illuminate / View / FileViewFinder.php
/** * The array of views that have been located. * * @var array */ protected $views = array();
к этому:
/** * The array of views that have been located. * * @var array */ public $views = array();
Таким образом, вы сможете получить доступ к имени представления.