laravel 表单验证的问题

刚从thinkphp5.1 转到laravel,做表单验证的时候,看文档有两种方式:

第一种是在控制器中直接用下面代码

$this->validte(request(),$rule)

第二种是

Validate::make(request()->all(),$rule);

但是两种有一点区别,第一种发现验证错误之后可以页面依然保留在提交页面,通过下面代码可以直接显示错误信息

@if(count($errors)>0)
    <div class="alert alert-danger" role="alert">
        @foreach($errors->all() as $error)
            <li>{{$error}}</li>
        @endforeach
    </div>
@endif

clipboard.png
但是第二种直接进入了表单的提交方法中,页面进行了跳转.

因为需要,自己重写了验证层,但并不想继承Controller类,用了如下方法处理验证:

class Validate
{
    protected $rule=[];
    protected $message=[];
    protected $sence=[];

    protected $input;
    private $validator;

   final public function check($input,$senceName=null){
       $this->input=$input;
       .....
       $this->validator=Validator::make($input,$rule,$message);
        /*验证失败处理,可以用异常处理*/
        if($this->validator->fails()){
            return back()->withErrors($this->validator)
                ->withInput();
        }
        return true;
    }

问题主要出在验证失败那块的代码,怎么样才能实现第一种验证的效果了,我的代码需要怎么修改.

还有一个问题,刚从tp框架转过来,以前找某个类中的方法,phpstorm中直接ctrl+左键一路就能找到.
但是在laravel中我老是找不到该方法,例如第一种controller基类中的valiate函数,怎么也找不到该函数的源码,laravel怎么快速找到相应的函数了.

请求各位赐教,不胜感激

阅读 2.1k
1 个回答

还有一种@_@也可以实现第一种的。

php artisan make:request TestRequest

会在app/Http/Requests 目录下生成一个 Request 需要将 authorize 方法中返回值默认的 false 改为 true 然后在 rules 方法中重写规则 messages 方法中重写 error 信息。

然后在控制器调用时 将默认注入的 Request 改成自己写的 Request 。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进