57
58

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Laravel:5つの便利なBladeディレクティブ

Last updated at Posted at 2018-05-23

元の記事

Five Useful Laravel Blade Directives

はじめに

この投稿は↑の記事を和訳したものです。

本文

テンプレートを簡素化するため、もしくは特定の問題を楽勝で解決できる便利なディレクティブを学ぶため、これから5つのBladeディレクティブを紹介します。特にLaravel初心者の方々にとっては、これらのヒントはLaravelのテンプレートエンジンであるBladeの素晴らしい機能を習得するのに役立つでしょう。

それでは、始めましょう。

1. ユーザーが認証されているかチェックする

ユーザーが認証されているかチェックする際には、以下のようにしてユーザーがNULLかどうかで判断できます。

@if(auth()->user())
    // ユーザーは認証されています。
@endif

しかしながら、Laravelにはもっと綺麗に同じ機能を実現するカスタムBladeディレクティブが備わっています。

@auth
    // ユーザーは認証されています。
@endauth

2. ユーザーがゲストかどうかをチェックする

以下のようにguest()関数を利用すれば、ユーザーが認証されていないゲストであるかどうかをチェックする事ができます。

@if(auth()->guest())
    // ユーザーは認証されていません。
@endif

しかしながらLaravelは@guestディレクティブも提供しています。

@guest
    // ユーザーは認証されていません。
@endguest

@elseステートメントを利用することで、これらの2つのディレクティブを組み合わせる事もできます。

@guest
    // ユーザーは認証されていません。
@else
    // ユーザーは認証されています。
@endguest

3. 最初のViewが存在すればそれをInclude、存在しなければ二つ目のViewをInclude

テーマが複数あるウェブサイトを構築する際には、指定されたファイルが存在しているか、存在していない場合は次のファイルIncludeするといった機能が必要になります。
これは、Bladeの簡単な条件式を用いる事で容易に実現できます。

@if(view()->exists('first-view-name'))
    @include('first-view-name')
@else
    @include('second-view-name')
@endif

最初に見つかったテンプレートをIncludeするには、以下のようにもっと短くてクリーンなディレクティブがあります。

@includeFirst(['first-view-name', 'second-view-name']);

4. 条件を元にViewをInclude

認証されたユーザーの場合にのみコンテンツを追加する場合など、条件に応じてViewをIncludeできるのは非常に便利です。

@ifの条件式を使うと、以下のように書き換える事もできます。

@if($post->hasComments())
    @include('posts.comments')
@endif

@includeWhenディレクティブを利用すれば、もっとクリーンに(たったの1行で)条件に応じたViewをIncludeする事ができます。

@includeWhen($post->hasComments(), 'posts.comments');

5. Viewが存在すればInclude

テーマをカスタマイズできるシステムもしくは、動的にViewを生成するようなシステムでは、必ず指定されたViewが存在するかをチェックしなければなりません。

もちろん、Viewヘルパーのexists関数を利用して対処する事ができます。

@if(view()->exists('view-name'))
    @include('view-name')
@endif

しかし、@includeIfディレクティブを利用すると、同じ事をするのにもっと簡単な方法がある事がわかると思います。

@includeIf('view-name')

official Blade documentationを見れば、これらのヒントや他の便利なコツに加えて、Laravelのプロジェクトにおけるフロントエンドのテンプレートに関するスキルアップをする事ができるでしょう。

これらのディレクティブを利用して、リファクタリングを楽しんでください!

57
58
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
57
58

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?