Laravel已验证数据怎么访问

wen PHP项目 1

本文目录导读:

Laravel已验证数据怎么访问

  1. 在控制器中使用 validated() 方法
  2. 使用表单请求(Form Request)
  3. 使用 validateWithBag() 方法
  4. 访问嵌套数据
  5. 批量赋值到模型
  6. 在 Blade 视图中访问
  7. 使用全局辅助函数
  8. 最佳实践建议

在 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'] ?? '') }}">

最佳实践建议

  1. 始终使用 validated() 方法:确保只访问经过验证的数据
  2. 类型提示:为更好的 IDE 支持,可以这样写:
    /** @var array $validated */
    $validated = $request->validated();
  3. 批量赋值安全:使用 $request->safe() 或明确指定可填充字段
  4. 错误处理:验证失败会自动重定向回表单并显示错误

这些方法都能安全地访问验证过的数据,选择哪种取决于你的具体使用场景和代码风格。

上一篇PHP验证失败自定义响应怎么写

下一篇当前分类已是最新一篇

抱歉,评论功能暂时关闭!