LoginSignup
8
4

More than 5 years have passed since last update.

【Laravel】エラーメッセージ、値部分のカスタマイズ

Last updated at Posted at 2018-12-03

やりたいこと

required_if等で 「◯◯が▲▲の場合、□□も指定してください」で、▲▲部分が値で直接表示されるのでカスタムしたい。
ただし、Validatorファサードでカスタムはしたくない。

想定

userテーブルにroleカラムがあり、roleが1(承認者)の場合は承認対象ページも入力させたい。

コード

nameにprefixでテーブル名をつけいている場合。

app/Http/Requests/UserRequest.php
    public function rules()
    {
        return [
            'user.role' => 'required',
            'user.authority_target' => 'required_if:user.role,1',
        ];
    }
resources/lang/ja/validation.php
<?php

return [

// 〜省略〜

    'values' => [
        'user' => [
            'role' => [
                '1' => '承認者',
            ]
        ],
        // 下記だと読み込まれない
        //'user.role' => [
        //  '1' => '承認者',
        //],
    ]
];


蛇足

上記の設定ファイル読み込んでいる部分

vendor/laravel/framework/src/Illuminate/Validation/Concerns/FormatsMessages.php
    // 304行目〜
    /**
     * Get the displayable name of the value.
     *
     * @param  string  $attribute
     * @param  mixed   $value
     * @return string
     */
    public function getDisplayableValue($attribute, $value)
    {
        if (isset($this->customValues[$attribute][$value])) {
            return $this->customValues[$attribute][$value];
        }

        $key = "validation.values.{$attribute}.{$value}";

        if (($line = $this->translator->trans($key)) !== $key) {
            return $line;
        }

        return $value;
    }

間違いや良き方法ありましたら、コメントください。
以上。

8
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4