使用自定义规则表单请求

时间:2015-03-24 15:57:05

标签: validation request laravel-5

我有一个CustomFormRequest,我想在其中使用自定义规则。这是FormRequest中的rules()方法。

public function rules()
{
    return [
            'name' => 'customrule'
    ];
}

Validorclass

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正在使用formrequest

 public function store(CustomFormRequest $request)
{
    $input = $request->all();
    dd("request succeeded");

我的FormRequest无法识别此规则(或至少未执行),因为请求始终成功。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您是否打算制定许多自定义规则?如果没有(我不相信这可以很好地扩展),这就是我使用的。不是那么漂亮的解决方案,但它很简短而且有效:

在您的请求文件中添加以下内容:

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!'
      );
  }
}