tag: PHP  1/1

スポンサーサイト

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の設定ミスかと思ってログ入れたり...

動的型付けerのための静的型付けerに怒られないJSONの作り方

ここ最近、ゲームのお仕事でPHPやらNode.jsやらのサーバーサイドからUnity (C#) やらUE4 (C++) やらのクライアントにJSONでデータ返すのが続いてるんだけど、PHPみたいな動的型付け言語のノリでJSONを吐いてクライアントからこっちは静的型付け言語だからこれじゃ困る、という話をされることがちょくちょくあるので、後学のためにちょっとまとめてみる。なお、実際のところどの程度困るのかとかは未確認なのでご了承ください。(単...

業務エラー例外の作り方の考察

今更なネタではあるものの、かれこれ1x年ぐらいサーバーサイド中心に開発してるけどいまだに悩むので考察を整理。まずここでいう業務エラー例外ってのは、業務固有の例えば「ポイントが足りません」「利用期間が終了しました」みたいなエラーを扱う例外のこと。業務って言ってるけど別にお仕事的なシステムに限らず、ソシャゲでもWebサービスにでも何でもある(だろう)やつ。昔っからあるはずなのに、何故か定番という感じのもの...

PHP7.1開発用のVagrant環境構築

先日自宅鯖のリポジトリを整理した結果、GitHub垢にアップできそうなネタがあったので、せっかくなので動作用にPHP7.1のVagrant環境を作成してUP。参考までにVagrantの設定は抜粋してこっちにも掲載しとく。アプリ環境構築まで入ったフル版はここ参照で。では以下設定。VagrantfileNode.jsの時の使い回しなんで割愛。過去記事かGitHub参照で。playbook.yml---- hosts: default vars: remi_repository: http://rpms.famillecoll...

[PHP]Zend DebuggerとXdebugのインストール

同じ内容のブログいっぱいあるけど、なんか毎回苦戦するので忘れないうちにメモっとく。PHPのデバッガでは Zend Debugger と Xdebug とかが有名。で、それらをWindows上の開発環境に入れてみた。環境はXP SP3 + PHP 5.2.17とVista x64 SP2 + PHP 5.2.11。Zend Debuggerは後者でだけ確認。Zend DebuggerはここからWindowsならcygwinの奴をダウンロードして、自分のバージョン・スレッドセーフの有無にあったdllを展開、php\extなり...

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。