Laravel で見逃していた7つの便利機能

こんにちは。フリーランス・コンサルタント&エンジニアの 九保すこひ です。

私が Laravel を開発で利用し始めたのはバージョン 4.2 からでした。

その後も Laravel は進化を続け、「え、ここまでやってくれるの!?」というニュースを連発しつづけてきたことは我々開発者にとってはとてもありがたいことです。

しかし、その機能追加が速いことや多すぎるため昔きっちりドキュメントを読んだ頃からするとちらほら「見落としちゃってるちょっとした便利機能」というのが出てくるようになりました。

そこで今回は「これってちょっと便利だよ?」とおすすめしたい機能を独自にまとめてみたいと思います。(独自、ということはみんなは「それ、当たり前だから!」も含まれてるってことです(笑))

では、早速いってみましょう!

1.Routing

パラメータに正規表現で制限をかけられる。
以下のようにすることで入ってくるパラメータに制限をかけられるのでセキュリティ上ベターになるかと。

Route::get('sns/{name}', function ($name) {
    //
})->where('name', 'facebook|twitter|google-plus');

グループにドメインを指定できる
これ地味に便利です。というのもテストなどローカルだけで実行したい記述をここにいれておけばコメントアウトを忘れをしても問題ありませんので。

Route::group(['domain' => 'my-site.dev'], function () {
    // Do something..
});

2.Controller

Restful API 用の Controller がコマンドで一発作成できる。
–resource オプションをつけるだけで GET, POST, PUT, DELETE に対応した Controller を自動作成してくれるなんて便利すぎです。

php artisan make:controller PhotoController --resource

しかも、–model をつければ自動でバインディングまでしてくれてしまいます!(モデルが存在しなければ「作る?」と聞いてきます)

php artisan make:controller PhotoController --resource --model=Photo

さらにさらに、 Route の方でも全ページを記述する必要ななく、たった一行でOK!

Route::resource('photos', 'PhotoController');

3.Request

配列はドットつなぎでらくらく取得。
もし、以下のような入力ボックスがあって送信されたら、

<input name="products[0][name]">
<input name="products[1][name]">
<input name="products[2][name]">
$name = $request->input('products.0.name');  // 一番上だけのデータ
$names = $request->input('products.*.name');  // 名前だけの配列

という形で取得できます。

fullurl() でURLを一発取得

過去には現在の URL を取得するのはめんどうだった記憶があったのですが、これがあればまさに一発!ですね。

$url = $request->fullUrl();

storeAs() でファイル名を指定して保存できる。
この記述の仕方もシンプルでとても素晴らしいです。

$path = $request->photo->storeAs('images', 'filename.jpg');

なお、Request からログインユーザーが取得できるのもとてもいいですね。

$user = $request->user();

4.helpers

old() ヘルパーもシンプルで便利。
たった3文字なので可読性が高いですし、デフォルト値も設定することができます。
とくに Blade 内で重宝していますね。

$value = old('value');
$value = old('value', 'default');

5.Validation

エラーメッセージの attribute name を簡単に設定できる。
lang 以下の validation.php 内にある attributes を設定すると自動でエラーメッセージに適用されます。
ちなみに日本語の場合は「resources/lang/ja/validation.php」です。

'attributes' => [
    'email' => 'メールアドレス',
],

※基本的な翻訳メッセージはここから取得できます。感謝!

6.Blade

@foreach … @endforeach 内で自動的に利用できるようになる $loop。

例えば、以下のような感じです。

$loop->index; // ゼロから始まる番号
$loop->iteration; // 1から始まる番号($i+1する必要なかった!)
$loop->remaining; // 残りはいくつが分かる数字。
$loop->first; // 一番最初のデータですか?
$loop->last; // 一番最後のデータですか?これを使えば<hr>で区切って簡単に最後だけ表示しないようにできますね!

また、@php … @endphp っていうがあるのを知りました。
いちいち を書く必要はなくなりますし、統一感がでるのでいいですね。

@php

    // ここは PHP プログラム

@endphp

7.Eloquent

モデル内に Notifiable トレイトと $events を設定するだけで以下のイベントを設定することができる。

creating, created, updating, updated, saving, saved, deleting, deleted, restoring, restored

class User extends Authenticatable
{
    use Notifiable;
    
    /**
    * The event map for the model.
    *
    * @var array
    */
    protected $events = [
        'saved' => UserSaved::class,
        'deleted' => UserDeleted::class,
    ];
}

番外編(View

ビュー単位で特定データを呼び出せるようになる ViewComposer
長くなるので説明は割愛します m_ _m

ということで、以上が7つのちょっと便利だよ、機能でした。
興味があったらぜひ活用してくださいね。

このエントリーをはてなブックマークに追加       follow us in feedly  
開発のご依頼お待ちしております
開発のご依頼はこちらから: お問い合わせ
どうぞよろしくお願いいたします! by 九保すこひ