Laravel – проверьте, не пусто ли

Можно ли проверить вид лезвия, если у @yield есть контент или нет?

Я пытаюсь назначить заголовки страниц в представлениях:

@section("title", "hi world") 

Поэтому я хотел бы проверить внешний вид макета … что-то вроде:

 <title> Sitename.com {{ @yield('title') ? ' - '.@yield('title') : '' }} </title> 

Вероятно, есть более красивый способ сделать это. Но это делает трюк.

 @if (trim($__env->yieldContent('title'))) <h1>@yield('title')</h1> @endif 

В Laravel 5 теперь мы имеем метод hasSection который можно вызвать на фасаде View .

Вы можете использовать View::hasSection чтобы проверить, является ли @yeild пустым или нет:

 <title> @if(View::hasSection('title')) @yield('title') @else Static Website Title Here @endif </title> 

Это условие проверяет, был ли раздел с названием названия указан в нашем представлении.

Совет . Я вижу, что многие новые ремесленники создали свои титульные разделы следующим образом:

 @section('title') Your Title Here @stop 

но вы можете упростить это, просто передав значение по умолчанию в качестве второго аргумента:

 @section('title', 'Your Title Here') 

Метод hasSection был добавлен 15 апреля 2015 года .

Из документов:

 @yield('section', 'Default Content'); 

Введите свой основной макет, например «app.blade.php», «main.blade.php» или «master.blade.php»,

 <title>{{ config('app.name') }} - @yield('title', 'Otherwise, DEFAULT here')</title> 

И на конкретной странице просмотра (файл клинка) введите следующее:

 @section('title') My custom title for a specific page @endsection 

Для тех, кто смотрит на него сейчас, вы можете использовать:

 @hasSection('name') @yield('name') @endif 

См .: https://laravel.com/docs/5.2/blade#control-structures

Вы можете просто проверить, существует ли раздел:

 if (isset($__env->getSections()['title'])) { @yield('title'); } 

И вы даже можете сделать еще один шаг и упаковать этот маленький фрагмент кода в расширение Blade: http://laravel.com/docs/templates#extending-blade

почему бы не передать название как переменную View::make('home')->with('title', 'Your Title') это сделает ваш заголовок доступным в $title

Я не думаю, что вы можете, но у вас есть варианты, например, с использованием композитора представления, который всегда предоставляет заголовок $ для ваших просмотров:

 View::composer('*', function($view) { $title = Config::get('app.title'); $view->with('title', $title ? " - $title" : ''); }); 

Не можете ли вы сделать:

layout.blade.php

<title> Sitename.com @section("title") Default @show </title>

И в subtemplate.blade.php:

 @extends("layout") @section("title") My new title @stop 

Способ проверки – не использовать ярлык «@», а использовать длинную форму: раздел.

 <?php $title = Section::yield('title'); if(empty($title)) { $title = 'EMPTY'; } echo '<h1>' . $title . '</h1>'; ?> 

Основываясь на ответе Collin Jame, если это не очевидно, я бы рекомендовал что-то вроде этого:

 <title> {{ Config::get('site.title') }} @if (trim($__env->yieldContent('title'))) - @yield('title') @endif </title> 
 @if (View::hasSection('my_section')) <!--Do something--> @endif