WEB開発でよく出てくるLaravelの小技集
はじめまして。入社して一ヶ月が経った、おっくんです。
入社前までフルテレワークだったので、フル出社なのが不安でしたが、通勤も悪くないなと思い始めています。
通勤はなんだかんだ良い運動になるし、昼休み時間に梅田近辺のいろんなお店に行けるし、オフィスビルの下のベンチに座って、日光浴もできて、健康に良いです。
今回はLaravelでウェブ開発をしていて、よく出てくるLaravelのテクニックをご紹介します。
リクエストに値があるかどうかの判定
フリー検索ワードの実装で、画面から検索ワードのリクエストで送られてきたら、検索条件に加えるという処理がよくあると思います。
具体的には下記のようなコードです。
app/Http/Controllers/GoodsController.php
public function index(Request $request) {
//
$goods_q = Good::query();
// キーワードから検索処理
if ($request->filled('keyword')) {
$keyword = $request->keyword;
$goods_q->where(function ($query) use ($keyword) {
$query->where('name', 'LIKE', "%${keyword}%")
->orWhere('note', 'LIKE', "%${keyword}%"); });
}
$goods_q->orderBy('created_at', 'desc');
// ページネーション
$goods = $goods_q->paginate(5);
return view('goods.index', compact('goods'));
}
このとき、filledメソッドを使えば、リクエストに値が存在し、空文字列でないことが判定できます。
検索処理などで、リクエストの値を判定する時に向いています。
// フリーワード
if ($request->filled('keyword')) {
$keyword = $request->keyword;
$goods_q->where(function ($query) use ($keyword) {
$query->where('name', 'LIKE', "%${keyword}%")
->orWhere('note', 'LIKE', "%${keyword}%");
});
}
if ($request->has('keyword')) {
// ...
}
設定値に便利なEnum
PHP8.1で登場したEumがとても便利です。
これまで設定値を管理するときに、config配下にファイルを作って、配列で管理していました。
例えば、下記のような感じです。
config/shingo.php
<?php
return [
'shingo' => [
'blue' => '青',
'yellow' => '黄',
'red' => '赤',
],
];
しかしconfigの配列で管理してしまうと、誤って値を更新してしまったり、存在しないキーを指定してしまい、エラーが起きたり、管理が大変になります。
enumは、変更できないキーと値を設定できるので、ラジオボタンの候補値を設定したり、プログラム上で必要な設定値を管理するのに重宝します。
上のconfigファイルをenumに書き換えると、下記になります。
<?php
namespaceApp\Enums;
enum ShingoStatusType: string
{
case BLUE = 'blue';
case YELLOW = 'yellow';
case RED = 'red';
}
可読性も上がりますね。値を取り出す時は下記のようにvalueメソッドを使用します。
echo ShingoStatusType::BLUE->value; // blue
また、labelメソッドを下記のように記載しておくと、ラジオボタンの候補値などの表示にとても便利です。
<?php
namespaceApp\Enums;
enum ShingoStatusType: string
{
case BLUE = 'blue';
case YELLOW = 'yellow';
case RED = 'red';
public function label(): string
{
return match($this) {
ShingoStatusType::BLUE =>'青',
ShingoStatusType::YELLOW =>'黄',
ShingoStatusType::RED =>'赤',
};
}
}
例えば、labelメソッドを使って、「青」という文字を画面に出したい場合は、下記のように、fromメソッドの引数にvalueを指定することで、表示できます。
<label>{{ \App\Enums\ShingoStatusType::from('blue')->label() }}</label>

また、ラジオボタンのすべての候補値を画面に出したい場合はcasesで全ケースを取得し、ループで表示します。
<div>
<label for="shingo">信号: </label>
<div>
@foreach(\App\Enums\ShingoStatusType::cases() as $shingo)
<input type="radio" id="{{ $shingo->value }}" name="shingo" value="{{ $shingo->value }}">
{{ \App\Enums\ShingoStatusType::from($shingo->value)->label() }}
</input>
@endforeach
</div>
</div>
実行結果:
このようにEnumを活用することで、設定値の管理が格段に楽になります。configファイルの大量の配列に悩まされていた方は、ぜひEnumを試してみてください。
PHP8.1以降で利用可能なので、導入してみる価値は大いにあります!
Bladeでよく出てくる処理
- old関数bladeのフォームでバリデーションに引っかかった時に、引っかかる前に入力していた値がinputタグに入っていてほしい時に使用します。
<input type="text" name="email" value="{{ old('email') }}" >
- @checkedチェックボックスのチェック状態を管理するために、@checkedを使用します。
<input type="checkbox" name="active" value="active" @checked(old('active', $user->active)) />
この場合、old関数のactiveに何らかの値があったら、checkedが入り、逆に、値がない場合、$user->activeの値で判定されます。$user->activeに何らかの値があったら、checkedが入り、それ以外の場合はcheckedが入りません。@ifで判定処理を書いていた方は、こちらを使用していただけると、よりスマートに書けます。
@selectedや@disabledなど、その他にも判定処理があるので、詳しくは公式ドキュメントを参照ください。
https://readouble.com/laravel/10.x/ja/blade.html#additional-attributes @foreach
一覧表示やチェックボックスの候補値の表示など、繰り返し処理が伴う、様々な場面で登場します。@foreach ($users as $user) @if ($loop->first) これが最初の繰り返しです。 @endif @if ($loop->last) これが最後の繰り返しです。 @endif <p>このユーザーは:{{ $user->id }}</p> @endforeach
foreachでコレクションや配列の中身を展開し、コレクションの場合は、メソッドチェーン(->)で値を取得し、画面表示できます。
$loop->firstでループの最初に何か処理を挟んだり、$loop変数を使って、ループに関わる様々な処理を行えます。詳しくは公式ドキュメントを参照ください。
https://readouble.com/laravel/10.x/ja/blade.html#the-loop-variable
まとめ
Laravelにはまだまだ多くの便利な機能やテクニックがあるので、ぜひ公式ドキュメントを参照しながら、実践で役立ててください(自戒)。
また、深掘りしたテクニックや、新しい機能についてご紹介したいと思います。お楽しみに!
ジェイオンラインではスタッフを随時募集しております。
採用情報ページよりお気軽にお問い合わせください。
この記事を書いた人
- 事務職などを経て、現在はWEBエンジニアを務めています。趣味は卓球、海外ドラマ、映画です。
最新の投稿
Laravel2024年6月3日WEB開発でよく出てくるLaravelの小技集