tag: Laravel  1/1

Laravel 6.0.3 で Call to undefined method setFormatter() のエラー

2019/10/4追記、Issue送ったらLaravel 6.1.0で修正されました。バージョンアップでOKです(^-^)今月頭に新しい長期サポート版 (LTS) となるLaravel 6.0がリリースされたわけだが、やったー!LTSだー!と飛びついたら一個だけバグっぽい現象に遭遇したので対処法書いとく。発生したのはバージョン6.0.3。現象としては、Laravel 6.0にアップグレードした後に、次のような例外が発生するというもの(以下エラーログから抜粋)。[2019-0...

Laravel小規模アプリ開発時の設計方針とかメモ

最近開発してたLaravelアプリ(APIサーバー)が、だいたい良い感じに(?)出来上がってきたので、参考用に開発時に決めた設計方針とかこういうクラス構成になったとか、そういうのをまとめてみる。なお、実際にこの方針をいくらか試した、お勉強用リポジトリがこちら。バージョンは5.8。前提まず最初に前提条件をまとめる。ごく小規模なアプリである(サーバーサイド開発は俺一人)性能要件も低い(想定リクエスト数は数rpsレベル...

LaravelでAPIパラメータをCamel Caseにするとめんどくさい

相変わらずLaravelネタ。Laravelのモデルのプロパティ名はイコールDBの列名なので、普通だと user_id みたいなDBで主流のスネークケースになる。で、JSON変換時もそれがそのまま使われるのだが、昨今のJSONのAPIだとキー名は userId みたいなキャメルケースが主流だと思うので、リクエスト/レスポンスではキャメルケースに変換したい。しかし、設定一発で解決とはいかず、ちょっと面倒な対応が必要だったので、その辺メモ。なお、...

LaravelでSQLログを出力する

最近続くLaravelネタ。今回はデバッグ用のSQLログの出し方について。試したバージョンは5.8。まず結論から。辿り着いた個人的最適解はこれ。これをこんな感じにEventServiceProvider辺りに入れてください。\DB::listen(function ($ev) { \Log::debug("DB({$ev->connectionName}): {$ev->sql}; bindings=" . \json_encode($ev->connection->prepareBindings($ev->bindings)) . ' time=' . sprintf("%.2fms", $ev->time));});Even...

LaravelでCache-Controlヘッダーを設定する

Laravelでは、レスポンスのCache-Controlヘッダーがデフォルトでは no-cache, private で返るみたいなんだけど、キャッシュしてもいいAPIでは設定変えたかったのでその方法。ググると自前でミドルウェア作って~みたいな情報も出てくるけど、結論からいうとLaravel 5.6からSetCacheHeadersというミドルウェアが標準で用意されているので、今はこれを↓みたいに有効にするだけでよい。Route::middleware('cache.headers:public')->gr...

LaravelでPaginatorをカスタムクラスに差し替える

またLaravelネタ。Laravel 5.7でJSON APIを作るにあたって、標準のLengthAwarePaginatorをそのまま使うと余計なプロパティが返ってしまうのでオーバーライドしたかった。最初はModel::paginate()をオーバーライドしようかと思ったけど、そんなことせずとも以下のようにDIで簡単に出来た。namespace App\Models;use Illuminate\Pagination\LengthAwarePaginator;class JsonLengthAwarePaginator extends LengthAwarePaginator{ p...

Laravelで日時をISO 8601形式にするとめんどくさい

APIで返す日時のフォーマットというとUNIXTIMEかISO 8601形式(2019-01-26T12:00:00Z みたいな奴)だと思うが、Laravel 5.7でISO 8601形式を使おうとしたら、実現はできたけど色々ハマったのでメモ。Laravelでの日時の扱いまず、Laravelの日時の扱いを整理する。Laravelでは、日時を扱うクラスとしてPHP標準のDateTimeではなく、DateTimeを拡張したCarbonライブラリを用いる。テーブルの列がDATETIME等でも、初期状態では文字列と...

Laravel + Vagrant + VirtualBox shared folders がクソ遅い問題

なんかLaravelが遅いと思ったら、表題の組み合わせだとクソ遅いという話。(以下、環境はLaravel 5.7, Vagrant 2.2.2, VirtualBox 5.2.22。)Vagrantの共有フォルダとして、ホスト側の準備が楽なvirtualbox(VirtualBox shared foldersを使う共有方式)を愛用しているのだけど、Laravelプロジェクトで使っていたら妙に遅い。空っぽのAPIで2秒とかかかるレベル。遅すぎる。最初Laravelやnginx、DBの設定ミスかと思ってログ入れたり...