2016-03-07 2 views
0

У меня есть форма, где есть несколько полей, включая страну и цену.laravel - изменить правило валидации на основе droplist

В настоящее время у меня есть только две страны. У одного есть формат валюты с двумя десятичными знаками, а другой с тремя.

Я должен проверить правильность ввода цены на основе выбранной страны? Как я могу это достичь. Я понимаю, что я должен использовать 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'); !!} Моя проблема заключается в том, что у меня есть все поля в той же форме. Как я могу обновлять правила?

+1

Пожалуйста, включите ваш код или этот вопрос будет закрыт. – TylerH

+0

Вы можете определить правила для проверки внутри функции, обрабатывающей форму, и просто проверить, какое значение имеет значение droplist, а затем использовать соответствующие правила. – James

+0

Я включил правила проверки. Он не включает правило цены, которое должно быть основано на значении выпадающего списка – dmSherazi

ответ

1

Создайте класс, который расширяет \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; 
     } 
    } 
} 

Вы можете зарегистрировать выше пользовательские правила проверки, передавая класс и методы методы расширения валидатора фасада. Это должно быть помещено в boot() метод App/Providers/AppServiceProvider.php.

public function boot() 
{ 
    Validator::extend('foo', '[email protected]'); 
} 

Затем примените его в своих правилах валидации.

public function rules() 
{ 
    return [ 
     'price'=>'foo' 
    ]; 
} 
+0

Я получаю эту ошибку 'LOG.error: exception 'BadMethodCallException' с сообщением 'Method [validateCurrency] не существовать.' в /home/dmsheraz/public_html/demo/vendor/laravel/framework/src/Illuminate/Validation/Validator.php: 2997' – dmSherazi

Смежные вопросы