做开发有个原则是永远不能信任用户输入的数据;
即便前端已经做了验证;
在后端 php 也必须要再次验证;
laravel 为表单验证提供了强大且简单的方案;
创建示例路由:
routes/web.php
Route::prefix('validation')->group(function () {
Route::get('create', 'ValidationController@create');
Route::post('store', 'ValidationController@store');
Route::get('edit', 'ValidationController@edit');
Route::post('update', 'ValidationController@update');
});
PHP表单验证 ;
要使用这个验证器也很简单;
只需要在 store
方法的类型约束中使用 Store
即可;
use App\Http\Requests\Validation\Store;public function store(Store $request)
{
dump($request->all());
}
PHPlaravel-lang ;
composer require "overtrue/laravel-lang:~3.0"
BashCopy
在 config/app.php 文件中把 Illuminate\Translation\TranslationServiceProvider::class,
替换成 Overtrue\LaravelLang\TranslationServiceProvider::class,
;
再次点击注册按钮就可以看到中文的提示信息了;
但是我们可以看到 tag
并没有被翻译出来;
像这类非通用性的字段;
我们可以在验证类 app/Http/Requests/Validation/Store.php 中定义 attributes
方法;
在方法中以键值对的方式翻译字段;
public function attributes()
{
return [
'tag' => '标签',
];
}
PHPCopy
再次刷新页面;
标签是翻译过来了;
但是我明明一个下拉选择标签但是提示却是输入类型的不能为空;
叔可以忍婶婶是忍不了了;
像这类情况我们还可以在验证类 app/Http/Requests/Validation/Store.php 中定义一个 messages
方法;
在方法中以字段拼接验证类型来翻译字段和验证类型的错误信息;
public function messages()
{
return [
'tag.required' => '必须选择标签',
];
}
PHPCopy
泼飞克特;
终于如愿以偿;
验证失败的信息都是在 session 中存储;
可以使用 session()
获取到失败的信息;
另外 laravel 还在 app/Http/Kernel.php 中注册了 ShareErrorsFromSession
中间件;
它的作用是可以让我们在视图文件直接使用储存了错误信息的变量 $errors
;