九保すこひ@フリーランスエンジニア|累計300万PVのブログ運営中
前回、Laravel5.6の新機能でエラーをslackに送信という記事を公開したんですけど、せっかくなので、その他で気になった新機能もまとめてみることにしました。
皆さんの参考になったら嬉しいです。
1.UUID
ユニークな(一意な)IDを取得するメソッドです。
追加されたのは、
use Illuminate\Support\Str; echo (string) Str::uuid(); // d4b3e48c-3b30-40b7-a90d-09bc979cde33 echo (string) Str::orderedUuid(); // 8a185f1c-2876-4120-b924-4d1ea1655305
の2つです。
1つめは通常のユニークIDで、2つ目はタイムスタンプをからめた文字列を取得できるんで、データベース内のインデックスにするなどの利用方法を想定しているようです。
ただ、私の環境では、orderedUuid()で、以下のエラーが発生してしまったので解決法を残しておきたいと思います。
Cannot call Ramsey\Uuid\Converter\Number\DegradedNumberConverter::toHex without support for large integers, since integer is an unsigned 128-bit integer; Moontoast\Math\BigNumber is required.
まず、bcmathというパッケージがPHPにインストールされてない場合、以下のようにインストールしましょう。
sudo apt install php7.2-bcmath
※phpバージョンで変わってくると思うんで、ご自身の環境に合わせてインストールしてください。
で、インストール&ウェブサーバーの再起動が済んだら以下のパッケージをcomposerを使ってインストールします。
composer require moontoast/math:*
※もしかすると、PHP環境にbcmathが入っていればLaravelのインストール時に自動的に準備してくれるのかもしれません。
2.モデル内の日付・自動変換
以前からモデル内に$castsを設置すれば、自動的にCarbonインスタンスに変換してくれてましたけど、今回は日付フォーマットも指定することができるようになってきます。
例えば、モデル内に
protected $casts = [ 'shipped_date' => 'date:Y-m-d', 'shipped_at' => 'datetime:Y-m-d H:00', ];
という風にキャスト指定すると、以下のようにした場合、
$item = \App\Item::find(1); $json = $item->toJson(); $array = $item->toArray();
$jsonがこんな感じで、
"{"shipped_date":"2018-01-01","shipped_at":"2018-01-01 12:00"}"
$arrayが、日付フォーマットが適用されます。
array:2 [▼ "shipped_date" => "2018-01-01" "shipped_at" => "2018-01-01 12:00" ]
ただ、この機能のすごいところは、通常のデータアクセスの場合は、これまでどおりCarbonインスタンスでデータが返ってくる(つまりフォーマットは常に固定ではなく、jsonもしくはarrayの場合のみ有効)ところです。
$item->shipped_date; // Carbonインスタンス /*** アウトプット Carbon @1514764800 {#496 ▼ date: 2018-01-01 00:00:00.0 UTC (+00:00) } ***/
つまり、以下のような使い方ができるってことですね。
echo $item->shipped_date->format('Y-m-d H:i'); // 2018-01-01 00:00
なので、特にjsonなんかは、Vueとの連携がやりやすくなりますね。
3.APIコントローラー作成コマンド
以下のコマンドを実行すると、/app/Http/Controllers/API内にコントローラーが作成されて、しかも内容は、
- index()
- store()
- show()
- update()
- destroy()
のメソッドがすでに用意されていて、RESTfulな内容になっています。
php artisan make:controller API/PhotoController --api
以上です。
新しいバージョンが出るたびにLaravelはもう進化しきってるんじゃない??なんて思ってしまうんですけど、まだまだこれからも楽しみなフレームワークですね!
ではでは〜。