馬とテニスのIT革命
馬とテニスとリラックマが好きな IT 系のエンジニアです。
PHP

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

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

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

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

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

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

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

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

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

$ artisan make:provider ValidatorServiceProvider

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

public function boot()
{
  $this->app->validator->resolver(function($translator, $data, $rules, $messages, $attributes) {
    return new CustomValidator($translator, $data, $rules, $messages, $attributes);
  });
}

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

Web API The Good Parts

オライリーの「Web API」に特化した本です。最近の多くの Web サービスは API が活用されていますが、その技術はこれまでの Web サイトとそれほど大きく変わりません。

今後、マイクロサービス化が進む中で知っておいて損はない内容が詰め込まれており、現場のエンジニアやこれから Web 系のエンジニアを目指す人にもオススメの一冊です。

created by Rinker
¥2,376
(2018/10/19 13:59:11時点 Amazon調べ-詳細)

あなたにオススメ