web-dev-qa-db-ja.com

Laravel 5ビュー名を取得

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では、composerを使用して、すべてのビューで変数を共有できます( Laravel 4のマスターlayour内で現在のビュー名を取得するにはどうすればよいですか? =)。ただし、マスターレイアウトに必要なビュー名は1回だけです。

これを行う:

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

次のエラーCall to undefined method Illuminate\View\Factory::getName()が表示されます。

前もって感謝します!

13
JasonK

ビューcomposerをbootメソッドに追加し、「*」を使用してすべてのビューと共有することにより、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}}ブレードテンプレートで利用できるようになります。

26
spedley

@mottoの回答に基づいて、私は瞬く間にブレードファイルを取得することができました。

find()は、ビュー、パス、および名前空間を検索するViewFileFinderクラスの関数です。

次に、リターンを分解してファイル名を取得します。 last()はlaravelのヘルパー関数です。

@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
0
Mohammed Omer