0

国と価格を含む複数のフィールドがあるフォームがあります。

現在、私は 2 つの国しか持っていません。1 つは小数点以下 2 桁の通貨形式で、もう 1 つは 3 桁の通貨形式です。

選択した国に基づいて価格入力を検証する必要がありますか? どうすればこれを達成できますか。JS を使用して国の選択の変更を検出する必要があることは理解していますが、更新されたルールを適用する方法がわかりません??

ルールはこちら

public function rules()
{
    return [
        'email' => 'required|email|unique:users,email',
        'username' => 'unique:users,username',
        'password' => 'required|min:6|confirmed',
        'birthday' => 'date',
        'factory' => 'required|exists:factories,id',
        'country' => 'required|exists:countries,id',
        'category' => 'required',
        'rm_code' => 'required',
        'cost_basis' => 'required',
        'supplier' => 'required',
        'po_number' => 'required',
        'qty' => 'required|number|regex:^[1-9]\d*$',
        'purchase_date' => 'date',
        'received_date' => 'date',
        'price'=>'required|regex:/^\d*(\.\d{1,3})?$/'

    ];
}

Laravel 5 Javascript Validation{!! JsValidator::formRequest('App\Http\Requests\StoreBlogPostRequest', '#my-form'); !!}問題は、すべてのフィールドが同じ形式になっていることです。ルールを更新するにはどうすればよいですか?

4

1 に答える 1

2

を拡張するクラスを作成します\Illuminate\Validation\Validator。これはアプリケーションのどこにでも配置できますが、適切に名前を付けるだけです。

use \Illuminate\Validation\Validator;

class FooValidator extends Validator
{
    public function validate($attribute, $value, $parameters)
    {
        // You have access to all Input data.
        var_dump($this->data);

        // Check the country and the decimals in the price.

        if(VALIDATION_PASSES) {
            return true;
        } else {
            return false;
        }
    }
}

次に、Validator ファサードの extends メソッドにクラスとメソッドを渡すことで、上記のカスタム検証規則を登録できます。これは のboot()メソッドに配置する必要がありApp/Providers/AppServiceProvider.phpます。

public function boot()
{
    Validator::extend('foo', 'FooValidator@validate');
}

次に、検証ルールに実装します。

public function rules()
{
    return [
        'price'=>'foo'
    ];
}
于 2016-03-07T04:36:58.293 に答える