我有一个表单中的字段只有在其他两个字段设置为特定值时才需要。这不是required_with_all的情况。如果它们被设置,那就不是它,如果它们是专门设置的话。
示例:' foo' => ' required_if_all:巴,2,蝙蝠,1' ,
我添加了一个服务提供商:
<?php namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Validator;
class RequiredIfAllProvider extends ServiceProvider {
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
Validator::extend('required_if_all', function($attribute,$value,$parameters){
// Is required if the list of key/value pairs are matching
$pairs = [];
foreach($parameters as $kp => $vp) $pairs[$kp] = $vp;
foreach($pairs as $kp => $vp) if(\Request::input($kp) != $vp) return false;
return true;
});
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
//
}
}
我确保使用App\Providers\RequiredIfAllProvider
;在我的自定义请求文件的顶部。
如果bar和bat都是根据基于验证的参数设置的,则应将新错误添加到错误包中。
我花了很多钱。有什么想法吗?
答案 0 :(得分:0)
答案 1 :(得分:0)
config\app.php
下的providers
注册服务提供商,无需在请求类中使用它。 (Docs/Registering Providers)Input
门面获取其他属性!这严重限制了验证器的使用,并可能导致奇怪的错误。传递给验证回调的第四个参数是验证器实例。它有getData()
方法,为您提供验证程序当前正在验证的所有数据。extendImplicit()
方法进行注册。 (Docs\Custom Validation Rules)未经测试的示例代码:
public function boot()
{
Validator::extendImplicit('required_if_all', function($attribute, $value, $parameters, $validator) {
// No further checks required if value is there
if ($value) {
return true;
}
// Convert $parameters into a named array with the attributes as keys
$n_pairs = floor(count($parameters)/2);
$pairs = [];
for ($i = 0; $i < $n_pairs; $i++) {
$pairs[$parameters[$i]] = $parameters[$i+1];
}
// Check if all pairs match with the input
$data = $validator->getData();
foreach ($pairs as $key => $value) {
if ($data[$key] !== $value) {
// If at least one pair does not match, the rule is always true
return true;
}
}
// All pairs match, now $value has to be set
return !!$value;
});
}