Laravelのif文2種類の使い方を初心者もよく分かる実例で解説!

更新日:

PHPでifを使う方法を1度学んだ事はあるけど、今ひとつ実際にどう使うのか分かってないんだ。あとLaravelだと書き方が違うとも聞いた。その辺を詳しく教えて欲しい。

 

Laravelには

  • Controllerなどで使う通常のPHPのif文
  • blade専用の@を使ったif文

の2種類があります。

 

ifは、Laravelに限らず、プログラミングのどの言語でも一番使う基礎中の基礎です。

if文は「TOPページでは「ようこそ」と表示したいけど、他のページでは表示したくない」のような条件分岐を付けて、自動的に動かす機能です。

 

これを使いこなせると、一気にプログラミング自体ができるようになります。
この記事ではLaravelで使うif文2種を実例で1から分かりやすく教えていきます。

if文を理解する事で、Laravelで自分が作りたい機能をどんどん自力で作れるようになりますし、今後他の言語を身につける時も一気に分かるようになりますよ。

 

Laravel(PHP)での通常のPHPのif文の使い方

まずは通常のif文の使い方を覚えましょう。

これはLaravelに限らず、PHP共通の書き方です。
Laravelでは主にコントローラー上でこの通常のif文を使います。

LaravelのController.phpとは?初心者向けに図と例でやさしく解説

 

まず、ifの基本的な書き方なんですが、

if(  ){  }

こういう形状になってます。

最初の()には、「もし~なら」っていう条件を書いて、{}には、「〇〇する」っていう命令を書きます。

if( もし~なら ) { それがTRUEなら〇〇する }

これが基本的な書き方です。

 

TRUEってどういう事?
「正しい、その通りである」って意味なんだ。基本的にif文ってTrue(正)False(誤)で判断してるんだ。この後の実例でくわしく解説していくね。
Neby

これだけ聞いても、じゃあ、実際どこでどう使うの?ってイメージが湧かないですよね。なので、実例で解説していきます。

 

if文をController上で使う実例

では、あなたが実戦で使えるように、実例でifの使い方を解説していきます。

 

まず、あなたが何かサイトに新しい機能を付けたいと思ったら、
それをif文で作れないだろうかと考えます。

例えば、口コミサイトにこういう投稿フォームを作ったとします。

 

この時、「もしタイトル欄、本文欄、両方とも何も入力してない状態で投稿ボタンを押したら、その時は元のページにリダイレクトしたいな」と考えたとします。

そうしないと、空のデータがそのまま投稿されてしまうからです。
そこでコントローラーにif文を書いて、それを実現できないかと考えて書いてみます。

if(!$request->title && !$request->main){

       return redirect( '/create' )->with('status','↓ なんか書いてね');

}

突然すんげぇ難しいの出てきたぞ!って感じたと思いますが、中身の仕組みさえ分かってしまえば、あなたもスラスラ書けるようになります。

まず、条件(もし~なら)部分、
if( !$request->title && !$request->main )

  • $request->titleがタイトルの空欄に入力された文字、
  • $request->mainが本文欄に入力された文字です。
  •  ! は「False(ではない)」って意味があり、
  • &&は「かつ」って意味があります。

つまり、「タイトルがFalseかつ、本文がFalseなら」って書いてあります。False(正しくない、誤っている)つまり「(本来あるはずの)タイトルがない状態かつ、本文がない状態」とこの場合は捉えられます。

 

次の{}内の return redirect( '/create' )->with('status','↓ なんか書いてね');

「タイトルも本文もどっちもない状態が」Trueなら(その通りなら)、「/createにリダイレクトしてください」という意味です。投稿ページであるabc.com/createページに戻るって事です。

で、後ろの->withの部分は、メッセージも一緒に送るという事です。つまり、リダイレクトした時に、投稿ページに「↓ なんか書いてね」と表示させるという意味だと思ってください。

 

実際にコントローラーに書く場合の説明ですが、

public function xxxx(){  } の中に普通にif( ){ }で書けば動きます。上の例だと、「もし空欄だった時はリダイレクトしてね」の条件に引っかからなかったもの、つまりちゃんとフォームに記入された投稿はデータベースに保存されるようになってます。

これが基本のif文です。

ねぇ、その!とか&&とか、いろんな記号が出てくるじゃん?そういう特殊記号やいろんな命令文がいっぱいあるわけでしょ?それ全部覚えられないんだけど・・

自分もそんなに沢山PHPの命令文を覚えてるわけじゃないんだ。毎回ググるんだよ。こういう時はどんな命令文を使えばいいかなとか、「かつ」ってどの記号使うんだっけとか。

何度もif文を作ってるうちに!とか&&みたいなよく使う奴はだんだん覚えてくるから、心配いらないよ。今回も中身は覚えなくていいよ。大事なのは、if( ){ }でどんな事ができるかなっていうのを理解する事だよ。

Neby

 

PHPのif文のelseifとelse

さらにこのif文に条件を加えたい時は、elseif や else を使います。

例えば、今の投稿フォームに
タイトルは入力されたけど、本文が空欄で投稿ボタンを押された場合は、
タイトルをそのまま本文にもコピーしたいなと思ったとします。

こんなふうに↓

もしくは、本文だけ入力された場合も、タイトルにコピーしたいと思ったとしましょう。

 

この場合の条件分岐は

  1. 両方空欄なら、リダイレクトバックする
  2. タイトルだけ記入されてたなら、本文にもコピーして保存する
  3. 本文だけ記入されたなら、タイトルにもコピーして保存する
  4. 両方記入されたなら保存する。

っていう分岐を作ればいいわけです。

こういう複数のifが出てくる場合は、elseifやelseを使います。

まずelseやelseifの基本的な書き方ですが、

if( ){ }elseif( ){ }else{ }
if( もし~なら ) {

 それがTRUEなら〇〇する

}elseif( もしくは~なら ){

 それがTRUEなら〇〇する

}else{

 その他の場合は〇〇する

}

こういう書き方になります。

実際にコントローラーに書いた例です。(中身は分からなくて良いので、ifとelseif, elseをどう使ってるかに注目してください。)

 

こういう状態です↓

if( もし両方False ) {

 それがTrueなら、リダイレクトする

}elseif( もしくはタイトルがFalse ){

 それがTrueなら、本文からHTMLタグを取り除いて、30文字切り抜いて、タイトルに代入して保存する

}elseif( もしくは本文がFalse ){

 それがTrueならタイトルを本文に代入して保存する

}else{

 その他(つまり両方とも記入されてるなら)そのまま保存する

}

これをもっと分かりやすい日本語にするなら、

if( もし両方無い ) {

 その通りなら、リダイレクトする

}elseif( もしくはタイトルが無い ){

 その通りなら、本文からHTMLタグを取り除いて、30文字切り抜いて、タイトルに代入して保存する

}elseif( もしくは本文が無い ){

 その通りなら、タイトルを本文に代入して保存する

}else{

 その他(つまり両方とも記入されてるなら)そのまま保存する

}

なんで、TRUEとFALSEっていうややこしい言葉で説明するの?最初から日本語で説明してくれた方が分かりやすいんだけど。

日本語の「〇〇なら〇〇する」だけで自分が覚えた時、途中で分からなくなった事があるから、わざとTrue,Falseで教えてるんだ。

例えば、!request->title を日本語で直訳した場合、「タイトルではない」という訳になる。でも「タイトルではない」だと、「タイトル以外、例えば本文があればOK」みたいな誤解をしやすい。実際は「タイトルがFalse(正しくない)」という意味なのに。

コンピューターって基本、TrueかFalseかで判断してるから、True or Falseで考える事がプログラミング上達にはすごく重要なんだ。

Neby

あとこれ、順番を間違うとうまく行かないんだ。上から必ず順番に処理されていくから、例えば、先に if(!request->title)「タイトルがFalseなら」ってやっちゃうと、両方空欄の時もタイトルは空欄だから当てはまっちゃう。すると間違った処理がされちゃうんだ。

ifに当てはまらなかった場合で「もしくは」を使いたい時はelseif。ifに当てはまらなかった場合の全部を指定したいなら、elseを使うんだ。

Neby

 

ちなみに、今作ったコードですが、3回も「データベースに保存」という同じコードを書いてます。しかしこれ、書き方を変えればもうちょっと短いコードにする事もできます↓

両方空っぽの時とelseで分けてしまい、elseの中にもし「タイトルだけ空なら」「本文だけ空なら」っていうif文を書く事で、いずれにせよ、最後のデータベースに保存が実行されるようになってます。

こうやって繰り返し書く事を少なくする事で、より軽快に動くサイトを作れるようになります。

 

LaravelのBladeでのif文の書き方

LaravelではBlade専用のif文の書き方があります。というのも、Bladeでは普通のPHPを書かないで、Blade専用のコード(ディレクティブ)を使います。

Laravelのblade.phpとは?普通のPHPは使える?初心者もよく分かる図と例で解説!

 

先程までは、

if ( ) { }

でしたが、bladeでは

@if ( )

@endif

と書きます。

 

if ( もし~なら ) {

  それがTRUEなら〇〇する

}

@if ( もし~なら )

  それがTRUEなら〇〇する

@endif

波括弧がなくなって、代わりに@ifと@endifでサンドイッチする形になってます。

 

実際にif文をbladeで使ってみよう!

では、またサイトを例に解説していきます。

例えば、「Topページでは、サイト名を<title>タグにしたい。でもその他のページでは投稿タイトルを<title>タグにしたい」とします。

↑TOPだとサイト名が<title>として表示される

↓投稿ページだと、投稿タイトルが<title>として表示される

 

このタイトルというのは、HTMLの<title></title>タグの内容が表示されてます。

  • topなら/ask
  • 投稿ページが/ask/123

のようになっているので、後ろに番号がくっつくか、くっつかないかで分岐を作れそうですね。

で、今回はHTML内のタグをPHPで操作したいので、blade.phpファイルに書いていきます。

まず、仮として、こんなふうに作ってみます。

@if (TOPページなら)

  <title>Japaslang Ask</title>

@else

  <title>{{$val->title}}</title>

@endif

ifの条件がTRUEなら「Japaslang Ask」と表示

else(その他)なら、コントローラーから渡された投稿titleを表示

 

そう今回、elseやelseifを使う場合は、

@if(条件1なら)

 こうしてください。

@elseif(条件2なら)

 こうしてください

@else

 その他はこうしてください

@endif

こういう書き方になります。

で、「このトップページとそうでない時を分けるのに丁度いいPHP命令文はないかな?」とググって、

こうなりました。\Request::is というのが、呼び出されてるURLの事で、つまりURLが/askと完全一致の時は、Japaslang Askと表示。そうでない時、つまり/ask/123のように、完全一致ではない時は、投稿タイトルを表示というふうに設定し、動くようになりました。

むしろ、通常のif文より、@Ifの方がシンプルで分かりやすいと思わないかい?見比べてみて欲しい。
Neby

確かに<?php?>のタグやechoなんかを書かなくていい文、迷わず書けていいね。
コントローラーでは、別にHTMLと混ぜて書くわけじゃないから、普通のPHP文を使うけど、HTMLと混ぜて書かなきゃいけないブレードに関してはこういった簡略化されたPHPが使えるようになってるんだ。
Neby

 

このように、if文は、サイトのページ別に違う表示をさせたい場合や、フォームの入力の有無、チェックボックスがONの時だけメールを送り、OFFの時は送らないなど、あらゆる条件分岐を作る事ができるプログラミングの要です。

自分でも実際にサイトを作りながら、ifでそれを達成できないかを常に考えて実戦してみてくださいね。それだけでどんどん実力が付いていきますよ。

 

Bladeの中で普通のif文やPHPは使えるのか?

blade.phpの中で普通のPHP if文を無理に使う理由はないですが、
blade専用PHPだけでは対応できない事もあります。

そんな時はbladeに<?php?>タグを使えば、普通のPHPも問題なく使えます。

もしくは、@php ~ @endphpと書いて使う事も可能です。

 

写真で血圧記録

  • この記事を書いた人

Neby

本を毎日多読しつつ、資産運用、プログラミング、心理学、ネットビジネススキルを猛向上中。貧富の差が広がる5年後、10年後に安心生活を送るためのお金のリテラシー、スキル、資産を一緒に作っていきましょう。

-PHP Laravel入門