source

Laravel - @yield가 비어 있는지 확인합니다.

manysource 2023. 9. 12. 20:05

Laravel - @yield가 비어 있는지 확인합니다.

@yield에 컨텐츠가 있는지 없는지 블레이드 뷰를 체크인할 수 있습니까?

보기에서 페이지 제목을 할당하려고 합니다.

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

그래서 메인 레이아웃 뷰를 확인하고 싶은데요...다음과 같은 것.

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

지금 보시는 분들은 (2018+) 다음을 이용하실 수 있습니다.

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

참조: https://laravel.com/docs/5.6/blade#control-structures

라라벨 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메소드는 2015년 4월 15일에 추가되었습니다.

아마 더 예쁜 방법이 있을 겁니다.하지만 이게 효과가 있어요.

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

문서에서 제공되는 내용:

@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('content')
  @yield('content')
@else
  \\Something else
@endif

If 문 - Laravel 문서에서 "섹션 지시사항" 참조

섹션이 존재하는지 여부를 간단히 확인할 수 있습니다.

if (isset($__env->getSections()['title'])) {

    @yield('title');
}

한 단계 더 나아가 이 작은 코드 조각을 Blade 확장 버전(http://laravel.com/docs/templates#extending-blade 으로 포장할 수도 있습니다.

새로운 Laravel 7.x --sectionMissing():

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

섹션이 누락되었는지 확인합니다.

@sectionMissing('name')
   @yield('alternative')
@endif

간단한 답변을 완료합니다.

<title> Sitename.com @hasSection('title') - @yield('title') @endif </title>

솔루션에 대해서도 유사한 문제가 있습니다.

@section('bar', '')
@hasSection('bar')
<div>@yield('bar')</div>
@endif
//Output
<div></div>

결과는 빈 상태가 될 것입니다.<div></div>

제 제안은, 이 문제를 해결하기 위해서는

@if (View::hasSection('bar') && !empty(View::yieldContent('bar')))
<div>@yield('bar')</div>
@endif
@if (View::hasSection('my_section'))
    <!--Do something-->
@endif

사용하다View::hasSection구간이 정의되어 있는지 확인하고View::getSection사용하지 않고 섹션 내용을 가져오다@yield블레이드 지시.

<title>{{ View::hasSection('title') ? View::getSection('title') . ' - App Name' : 'App Name' }}</title>

그럴 수는 없겠지만 뷰 작성자를 사용하여 항상 $ 타이틀을 뷰에 제공하는 것과 같은 옵션이 있습니다.

View::composer('*', function($view)
{
    $title = Config::get('app.title');

    $view->with('title', $title ? " - $title" : '');
});

제목을 변수로 전달하는 것이 어떨까요?View::make('home')->with('title', 'Your Title')이것은 당신의 타이틀을 사용할 수 있게 해 줄 것입니다.$title

할 수 없음:

layout.blade.layout

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

그리고 서브템플릿으로.blade.s:

@extends("layout")

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

확인방법은 '@' 바로가기를 사용하지 않고 '섹션'이라는 긴 형태를 사용합니다.

<?php
  $title = Section::yield('title');
  if(empty($title))
  {
    $title = 'EMPTY';
  }

  echo '<h1>' . $title . '</h1>';
?>

콜린 제임스의 답변을 토대로, 명확하지 않다면 다음과 같은 것을 추천합니다.

<title>
  {{ Config::get('site.title') }} 
  @if (trim($__env->yieldContent('title')))
    - @yield('title')
  @endif
</title>

해당 섹션에만 포함하고자 하는 엔클로저 코드가 비어 있지 않은 경우도 있습니다.이 문제에 대해 방금 다음과 같은 해결책을 찾았습니다.

@if (filled(View::yieldContent('sub-title')))
    <h2>@yield('sub-title')</h2>
@endif

제목 H2는 실제로 모든 값을 포함하고 있는 섹션에만 표시됩니다.그렇지 않으면 인쇄되지 않습니다...

언급URL : https://stackoverflow.com/questions/20412738/laravel-check-if-yield-empty-or-not