【问题标题】:Create a custom Validation rule that accepts two input parameters创建一个接受两个输入参数的自定义验证规则
【发布时间】:2013-09-06 08:15:22
【问题描述】:

我创建了一个接受一个输入参数的自定义验证规则。

Validator::extend('dns', function($attribute, $host, $parameters)
{
    return ($host !== gethostbyname($host));
});

规则

public static $rules = array(
    'nameserver'    => 'dns'
);

我在 global.php 文件中创建了一个名为 validators.php 的新文件并将其 include 以成为全局文件。

我想传递两个输入参数,以便进行更多的检查相互比较。 我怎样才能成功?

【问题讨论】:

    标签: php validation laravel laravel-4


    【解决方案1】:

    发送额外的参数,如:

    public static $rules = array(
        'nameserver'    => 'dns:foobar'
    );
    

    并通过以下方式访问它们:

    $parameters[0]
    

    在闭包中。

    [编辑] 一种使用输入播种验证器规则的方法:

    // model
    static $rules = array(
         'valOne' => 'required|custom:%s'
        ,'valTwo' => 'required'
    );
    
    // controller
    $inputValues = Input::only(array(
         'valOne'
        ,'valTwo'
    ));
    
    $rules = MyModel::$rules;
    
    $rules['valOne'] = sprintf($rules['valOne'], Input::get('valTwo'));
    
    $validator = Validator::make($inputValues, $rules);
    

    【讨论】:

    • 我的规则在我的模型中。您上面的示例在我的过滤器中传递字符串'foobar'。我将如何传递'foobar' 输入字段的值?
    • “dns”验证真的需要来自其他输入的值吗?也许您可以在单独的验证规则中验证它们。如果没有,也许您可​​以使用 str_replace 对 $rules['nameserver'] 中的值执行一些操作,并使用 input::get('foobar')。 (创建验证器时)
    • 我的目标是验证ip 是否指向给定的DNS。所以我需要两个输入字段。我认为Laravel 中没有内置这样的东西。我想我可以说Input::get(),但没有更好的选择吗?
    • 目前没有“脏”修复(也就是在构建验证器时在规则中提供输入变量)。检查 ip 和 dns 似乎是一项需要一些时间的任务,也许适合后台进程?
    • 我想我更喜欢使用会话变量而不是Input::get()
    猜你喜欢
    • 2020-03-11
    • 2012-01-01
    • 1970-01-01
    • 2019-11-05
    • 2018-07-29
    • 1970-01-01
    • 2020-02-24
    • 1970-01-01
    • 2020-05-20
    相关资源
    最近更新 更多