在 Laravel 中,验证器实例(Validator instance)是用于验证输入数据的工具。通常我们会在控制器中使用 Validator::make()
或 $request->validate()
方法来创建验证器实例。
是的,你可以在控制器中重用验证器实例,但需要注意以下几点:
validate()
方法use Illuminate\Support\Facades\Validator;
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'title' => 'required|unique:posts|max:255',
'body' => 'required',
]);
// 第一次验证
if ($validator->fails()) {
return redirect('post/create')
->withErrors($validator)
->withInput();
}
// 稍后在方法中重用
$validator->validate(); // 会再次验证
// 创建文章...
}
创建表单请求:
php artisan make:request StorePostRequest
然后在 app/Http/Requests/StorePostRequest.php
中定义规则:
public function rules()
{
return [
'title' => 'required|unique:posts|max:255',
'body' => 'required',
];
}
在控制器中重用:
public function store(StorePostRequest $request)
{
// 验证已自动完成,可以直接使用数据
$validated = $request->validated();
// 创建文章...
}
创建 Trait 来封装验证逻辑:
namespace App\Traits;
trait PostValidationTrait
{
protected function validatePostData(array $data)
{
return Validator::make($data, [
'title' => 'required|unique:posts|max:255',
'body' => 'required',
]);
}
}
在控制器中使用:
use App\Traits\PostValidationTrait;
class PostController extends Controller
{
use PostValidationTrait;
public function store(Request $request)
{
$validator = $this->validatePostData($request->all());
if ($validator->fails()) {
// 处理错误
}
// 创建文章...
}
}
validate()
会重复验证unique
等规则可能需要根据上下文调整通过以上方法,你可以有效地在 Laravel 控制器中重用验证器实例,提高代码质量和开发效率。