【问题标题】:laravel - modify validation rule based on droplistlaravel - 根据下拉列表修改验证规则
【发布时间】:2016-06-20 12:37:39
【问题描述】:

我有一个表单,其中有多个字段,包括国家和价格。

目前我只有两个国家。一种具有两位小数的货币格式,另一种具有三位小数。

我必须根据所选国家/地区验证输入的价格吗?我怎样才能做到这一点。我知道我应该使用 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'); !!} 我的问题是我的所有字段都采用相同的形式。如何更新规则?

【问题讨论】:

  • 请包含您的代码,否则此问题可能会被关闭。
  • 您可以在处理表单本身的函数中定义验证规则,并测试下拉列表的值,然后使用适当的规则。
  • 我已经包含了验证规则。它不包含需要基于下拉列表值的价格规则
  • @James 我正在使用`{!! Blade.php 脚本部分中的 JsValidator::formRequest('Vanguard\Http\Requests\Material\CreateMaterialRequest', '#material-form') !!}``。我粘贴在上面。

标签: javascript laravel laravel-validation laravel-form


【解决方案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;
        }
    }
}

然后您可以通过将类和方法传递给 Validator 门面的扩展方法来注册上述自定义验证规则。这应该放在App/Providers/AppServiceProvider.phpboot()方法中。

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

然后在你的验证规则中实现它。

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

【讨论】:

  • 我收到此错误LOG.error: exception 'BadMethodCallException' with message 'Method [validateCurrency] does not exist.' in /home/dmsheraz/public_html/demo/vendor/laravel/framework/src/Illuminate/Validation/Validator.php:2997
猜你喜欢
  • 2018-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多