好东西

laravel 表单请求验证

表单验证,如 thinkphp 中 是集成在 模型中, 也可以在控制器中 调用模型方法validate 方法来验证。

现如今,所有变成语言 或者设计模式 都讲究个  低耦合  。   laravel 的 表单验证也不例外, 被解耦 

 

laravel     表单验证 方法分成两种:

 一、继 承基类控制器  并使用validate 方法验证

 (App\Http\Controllers\Controller) 这个基类,使用了 ValidatesRequestsTrait。这个 Trait 在你所有的控制器里提供了方便的 validate 验证方法。 

简单讲就是这样 :

$this->validate

class IndexController extends Controller {

    /**
     * @param Request 请求类
     */
    public function store(Request $request)
    {
        //这里使用了 validate 
        $this->validate($request, [
        'title' => 'required|unique:posts|max:255',
        'body' => 'required',
    ]);

    }
}

 

方法二: 单独建立一个文件,使用注入方式 提供给 store方法。  

在这个例子中 ,我使用了TestStore 类型 来注入,如果路由 执行到这个方法,那么将会先运行,TestStore类

class IndexController extends Controller {

    /**
     *
     */
    public function index(Request $request)
    {
       return view('test.test');
    }

    /**
     * @param TestStore $request 这个是use过来的 表单验证请求类
     */
    public function store(TestStore $request)
    {
        //如果表单验证失败,这个方法不会执行

        if($request->isMethod('POST')){
            dd($request->all()); exit;
            if($request->messages()){
                dd($request->messages());exit;
            }
        };

    }
}

 

再看一下 TestStore类。 路径为 App/Http/Requests/

 'sometimes|required|unique:test|max:5',
            'password' => 'required|max:5',
        ];
    }

    public function messages()
    {
        return [
            'username.required' => '用户名未填写',
            'password.required'  => '密码未填写',
            'username.unique' => '用户名不唯一',
            'username.max' => '用户名超过最大数',
            'password.max'  => '密码超过最大限制',

        ];
    }

}

从这里看出, 使用类来单独定义, 第一 实现了 低耦合  ,第二 控制器中的代码 也会精简。不会那么乱。 

 

这里有个需要注意的地方,使用模型验证,肯定有出错的时候,也就是不匹配   如何捕捉错误。

laravel规定,如果出现错误,控制器代码不会执行,验证失败会直接get跳转到 原始页面,也就是发起提交的页面。

这里 laravel 在每个模板中已经注入了 一个 变量 $errors   ,直接在模板中 这样来使用就可以了。

$errors->first('username')

$errors->first('password')

出现错误的时候 会自动显示。


 

{{$errors->first('username')}}

{{$errors->first('password')}}

{{ method_field('POST') }}

 

 

 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.nameliu.com/blog/single/42.html

start主题

发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。