PHP

LaravelのRequestFormでattributesのオーバーライドが効かない

Laravel の RequestForm クラスを使ってバリデーションを行っている人も多いと思います。

コントローラやリポジトリクラスに定義してもいいのですが、凝ったことをしないのであれば、RequrstForm は便利です。

ただ、以前から上手くいかないことがあったので、重い腰を上げて調べてみることにしました。

attributesの設定が反映されない原因

今回の問題は RequrstForm を継承したクラスで attributes メソッドをオーバーライドしても、項目名が置換されない現象です。

同様のケースがなかなかヒットしなかったので、元々この現象が発生していたのか、どこかのタイミングで発生し始めたのか調べてみました。

原因はカスタムバリデーション実装時のValidatorServiceProvider

結果から言うと、カスタムバリデーションを実装した際に、artisan コマンドで ValidatorServiceProvider クラスを生成してロードしていたのですが、ここの実装時にミスがありました。

生成されたクラスの boot メソッドの中は、以下のように定義していたのですが、ここに attributes の配列が渡っていなかったのが原因です。

取り急ぎで、参考例をコピペしてしまった典型的なミスですね。大反省です。