2016-06-14 2 views
0

私はカスタムバリデータをしました、(簡体字)Laravel 5.2 |カスタム置き換え決してフライでCalculcated値で属性を設定することは

フォームリクエスト下記参照

public function rules() 
{ 
    return [ 
     'amount' => 'required|numeric|max_invest:10000' 
    ]; 
} 

public function messages() 
{ 
    return [ 
     'max_invest' => 'You can invest max :mi' // I want to set :mi on the fly 
    ]; 
} 

バリ

public function validateMaxInvestment($attribute, $value, $parameters, $validator) 
{ 
    $this->setAttributeNames(['mi' => intval($parameters[0] - $value)]); // Try to set the attribute mi on the fly 
    return $value < $parameters[0]; 
} 

私が登録してい私のサービスプロバイダのbootメソッドのvalidatorは次のようになります。

$this->app['validator']->extend('maxInvestment', 
     '[email protected]'); 

問題

バリデータが正常に動作しますが、メッセージは私が滞在を得る:

あなたは有効になりませんsetAttributeNamesメソッドを呼び出すと、最大:mi

を投資することができます。

答えて

0

documentationの下部にあるように紛失する可能性のある代替物を使用する必要があります。

カスタム検証ルールを作成するときに、エラーメッセージのためのカスタムプレースホルダーの置き換えを定義する必要が生じることがあります。 を実行することができます。上に説明したようにカスタムバリデータを作成し、バリデータファサードの代替メソッドに を呼び出します。あなたは、サービスプロバイダの起動方法の中に、この を行うことがあります。

public function boot() { 
    Validator::extend(...); 
    Validator::replacer('foo', function($message, $attribute, $rule, $parameters) { 
     return str_replace(...); 
    }); 
} 

をだからあなたの場合のために、以下のようなものが動作するはずです。

protected function validateMaxInvestment($attribute, $value, $parameters, $validator) 
{ 
    $replace = intval($parameters[0] - $value); 
    $validator->addReplacer('max_invest', function ($message) use ($replace) { 
     return str_replace(':mi', $replace, $message); 
    }); 
    return $value < $parameters[0]; 
} 

また、あなたは以下のようなこともできると思います。

protected function validateMaxInvestment($attribute, $value, $parameters, $validator) 
{ 
    return $value < $parameters[0]; 
} 

protected function replaceMaxInvestment($message, $attribute, $rule, $parameters) 
{ 
    $replace = intval($parameters[0] - \Input::get($attribute)); 
    return str_replace(':mi', $replace, $message); 
} 

おそらく、再度登録する必要があります。

$this->app['validator']->replacer('maxInvestment', '[email protected]'); 
関連する問題