Laravel 4中的自定义验证

时间:2014-01-27 08:22:16

标签: php validation laravel laravel-4

要向Laravel添加新验证,我已经这样做了:

customValidation.php

中制作了一个名为app/start/的新文件

然后将其包含在app/start/global.php中,并使用echo()对其进行测试,结果正常。所以它现在被加载到应用程序中。

然后我编写了以下代码来验证Laravel中的复选框:

/* 
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
class customValidate extends Illuminate\Validation\Validator
{
    public function validateCheckbox($attribute, $value, $parameters)
    {
        //if(isset($value)) { return true; } else { return true; }
        echo "this is the: " . $value;
    }
}

/**
 * Resolvers for Custom Validations
 */
Validator::resolver(function($translator, $data, $rules, $message){
 return new customValidate($translator, $data, $rules, $message);   
});

但是,在我的验证规则中,我定义了:

`array('sex'=>'checkbox')`

但它不起作用。什么都没发生。不会抛出任何错误。该应用程序的行为就像它根本没有执行该功能。此外,当我在函数内回应某些东西时,没有任何东西得到回应,这是该函数根本没有被调用的另一个证据。

2 个答案:

答案 0 :(得分:5)

我会为此创建自定义app/validators文件夹。

1,创建app/validators/CustomValidate.php

<?php

class CustomValidate extends Illuminate\Validation\Validator
{

    public function validateCheckbox($attribute, $value, $parameters)
    {
        echo "this is the: " . $value;
    }

}

2,运行php artisan optimizecomposer dumpautoload

3,某处注册您的自定义验证程序。也许将app/validators.php添加到start/global.php

Validator::resolver(function($translator, $data, $rules, $message){
    return new CustomValidate($translator, $data, $rules, $message);
});

4,验证

$rules = ['agreed' => 'checkbox'];
$data = ['agreed' => 0];

$v = Validator::make($data, $rules);

dd($v->passes());

答案 1 :(得分:0)

提交表单时,收音机未设置为初始状态,这使得Laravel不会查找该项目的验证器。所以,它没有任何解决方法。我做的是我只是在无线电中添加了一个初始状态,然后就可以了。

很像Andreyco说的