本文目录导读:

- 在控制器中使用
validated()方法 - 使用表单请求(Form Request)
- 使用
validateWithBag()方法 - 访问嵌套数据
- 批量赋值到模型
- 在 Blade 视图中访问
- 使用全局辅助函数
- 最佳实践建议
在 Laravel 中,经过验证的数据可以通过多种方式访问,以下是几种常见的方法:
在控制器中使用 validated() 方法
public function store(Request $request)
{
$validated = $request->validate([
'title' => 'required|string|max:255',
'content' => 'required|string',
'author' => 'required|string'
]);
// 方式1:直接使用 validated 数组
$title = $validated['title'];
$content = $validated['content'];
// 方式2:使用 dot notation
$title = $validated['title'];
// 方式3:使用 helper 函数
$title = data_get($validated, 'title');
}
使用表单请求(Form Request)
// 创建表单请求类
php artisan make:request StorePostRequest
// StorePostRequest.php
public function rules()
{
return [
'title' => 'required|string|max:255',
'content' => 'required|string',
'author' => 'required|string'
];
}
// 控制器中使用
public function store(StorePostRequest $request)
{
// 方式1:获取所有验证过的数据
$validatedData = $request->validated();
// 方式2:获取单个字段
$title = $request->validated('title');
$content = $request->validated('content');
// 方式3:使用 safe() 方法(Laravel 8+)
$safeData = $request->safe();
$title = $safeData->title;
// 方式4:直接获取特定的字段
$only = $request->safe()->only(['title', 'content']);
$except = $request->safe()->except(['author']);
}
使用 validateWithBag() 方法
public function store(Request $request)
{
$validated = $request->validateWithBag('post', [
'title' => 'required|string|max:255',
'content' => 'required|string',
]);
// 访问验证过的数据
$title = $validated['title'];
}
访问嵌套数据
// 验证规则
$rules = [
'user.name' => 'required|string',
'user.email' => 'required|email',
'items.*.id' => 'required|integer'
];
$validated = $request->validate($rules);
// 访问嵌套数据
$userName = $validated['user']['name'];
$userEmail = $validated['user']['email'];
// 使用 dot notation 访问
$userName = data_get($validated, 'user.name');
$items = data_get($validated, 'items');
批量赋值到模型
public function store(Request $request)
{
$validated = $request->validate([...]);
// 方式1:直接创建
$post = Post::create($validated);
// 方式2:只允许特定字段
$post = Post::create($request->safe()->only(['title', 'content']));
// 方式3:排除特定字段
$post = Post::create($request->safe()->except(['author']));
}
在 Blade 视图中访问
// 控制器
return view('posts.show', [
'validatedData' => $validated
]);
// Blade 视图
<p>{{ $validatedData['title'] }}</p>
<p>{{ $validatedData['content'] }}</p>
// 或者使用对象语法
<p>{{ $validatedData->title }}</p>
使用全局辅助函数
$validated = request()->validate([...]);
// 使用 old() 辅助函数(在重新显示表单时)
<input type="text" name="title" value="{{ old('title', $validated['title'] ?? '') }}">
最佳实践建议
- 始终使用
validated()方法:确保只访问经过验证的数据 - 类型提示:为更好的 IDE 支持,可以这样写:
/** @var array $validated */ $validated = $request->validated();
- 批量赋值安全:使用
$request->safe()或明确指定可填充字段 - 错误处理:验证失败会自动重定向回表单并显示错误
这些方法都能安全地访问验证过的数据,选择哪种取决于你的具体使用场景和代码风格。