使用自定义规则的表单请求
Form requests with custom rules
我有一个 CustomFormRequest,我想在其中使用自定义规则。这是 FormRequest 中的 rules() 方法。
public function rules()
{
return [
'name' => 'customrule'
];
}
有效类
class CustomValidator extends Illuminate\Validation\Validator{
protected function customrule( $attribute, $value ) {
return false;
}
我有一个带有以下 boot() 方法的 CustomServiceProvider
public function boot()
{
\Validator::resolver(function($translator, $data, $rules, $messages)
{
return new CustomValidator($translator, $data, $rules, $messages);
});
}
CustomServiceProvider 列在 app.php 文件中。
Controller hat 正在使用表单请求
public function store(CustomFormRequest $request)
{
$input = $request->all();
dd("request succeeded");
我的 FormRequest 无法识别此规则(或至少未执行),因为请求总是成功。我该如何解决这个问题?
您打算制定很多自定义规则吗?如果不是(我不相信这个比例很好),这就是我使用的。不是那么漂亮的解决方案,但它很短而且有效:
在您的请求文件中添加:
use Illuminate\Validation\Factory;
class YourRequest extends Request {
...
public function __construct(Factory $factory)
{
$factory->extendImplicit('customrule', function ($attribute, $value, $parameters) {
//$value is what the user typed in the form or what came from POST
// do some logic here, if the input is correct, return true else return false e.g.:
if($value == 'what_is_expected')
return true;
else
return false.
},
'Custom rule failed error message!'
);
}
}
我有一个 CustomFormRequest,我想在其中使用自定义规则。这是 FormRequest 中的 rules() 方法。
public function rules()
{
return [
'name' => 'customrule'
];
}
有效类
class CustomValidator extends Illuminate\Validation\Validator{
protected function customrule( $attribute, $value ) {
return false;
}
我有一个带有以下 boot() 方法的 CustomServiceProvider
public function boot()
{
\Validator::resolver(function($translator, $data, $rules, $messages)
{
return new CustomValidator($translator, $data, $rules, $messages);
});
}
CustomServiceProvider 列在 app.php 文件中。
Controller hat 正在使用表单请求
public function store(CustomFormRequest $request)
{
$input = $request->all();
dd("request succeeded");
我的 FormRequest 无法识别此规则(或至少未执行),因为请求总是成功。我该如何解决这个问题?
您打算制定很多自定义规则吗?如果不是(我不相信这个比例很好),这就是我使用的。不是那么漂亮的解决方案,但它很短而且有效:
在您的请求文件中添加:
use Illuminate\Validation\Factory;
class YourRequest extends Request {
...
public function __construct(Factory $factory)
{
$factory->extendImplicit('customrule', function ($attribute, $value, $parameters) {
//$value is what the user typed in the form or what came from POST
// do some logic here, if the input is correct, return true else return false e.g.:
if($value == 'what_is_expected')
return true;
else
return false.
},
'Custom rule failed error message!'
);
}
}