本文目录导读:

- 在控制器中使用
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()或明确指定可填充字段 - 错误处理:验证失败会自动重定向回表单并显示错误
这些方法都能安全地访问验证过的数据,选择哪种取决于你的具体使用场景和代码风格。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播