Laravel で .env の内容が反映されない場合

公式マニュアルにも記載があるが、
Laravel アプリで artisan config:cache を行っていると .env を変更してもファイルの内容が反映されない
また、アプリ内で env ヘルパー関数などから直接環境変数を参照しているとそもそも値が渡っていない
下記実装を見ると分かるが、 config キャッシュ済みの場合はそもそも .env のロード自体がスキップされるため

framework/LoadEnvironmentVariables.php#L20 at bd352a0d2ca93775fce8ef02365b03fc4fb8cbb0 · laravel/framework

解決するには config を cache しない、又は env の値を config ファイルを経由して参照するよう徹底し値の変更ごとに cache し直す

Laravel の Input 値が空文字列だったら null に変換する機能を無効にする

Model のフィールドに空文字列を渡しているつもりが mysql 側から NonNull なカラムに Null が渡されたとエラーが返ってきてこの機能の存在に気づいた
middleware は非常に便利だが、自分が実装・追加したわけではない処理に関してはこのような暗黙的な副作用があったりして中々厳しい

HTTP Requests - Laravel - The PHP Framework For Web Artisans
ドキュメントにも書かれており、どうやら 5.4 からこの挙動がデフォルトになったようだ
無効にするには App\Http\Kernel クラスにある ConvertEmptyStringsToNull middleware をコメントアウトすれば良い

静的サイトジェネレーターを試して wordpress に戻ってみた話

これまで jekyll, middleman, hugo などの静的サイトジェネレーターを試してきたけど、どうにも CLI で編集・管理する作業に慣れず長続きしなかった

調べてみると GUI を持ったものもいくつか存在したが情報が少なそうだったので結局ローカルPCで wordpress を使って静的サイトを出力するという、本末転倒気味なことを試してみることにした

途中、静的サイトジェネレーターに慣れた方が良かったのでは…?と思わないでもなかったが、一応それなりな環境が出来てしまったので作業の記録を残しておく

続きを読む