【问题标题】:Laravel form request duplicate queryLaravel 表单请求重复查询
【发布时间】:2019-09-01 06:50:56
【问题描述】:

我想获取一条记录并使用它执行验证。

所以我看到两个选项在控制器中使用验证和使用表单请求

我更喜欢使用表单请求

所以根据一个文档我可以在表单请求中获取一条记录并使用它。

但问题是我也需要控制器中的记录,所以如果我这样做,我会加载两次记录。

我正在解决表单请求中的属性问题

例如

/**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        $this->post = Post::find($this->input('id'));
        return [
            ... // my rules base on $this->post
        ];
    }

然后在控制器中,我可以访问帖子值

public function store(PostPublishCreate $request)
{
    $request->post;
    ....

1.但是我在这种情况下很困惑,我的方式有问题吗?在 laravel 中是否有更好的解决方案?

2.在这个例子中我没有使用依赖注入,那么我该如何使用依赖注入呢?

public function store(PostPublishCreate $request,Post $post)
    {
        // how to prevent to my record provided twice
        // PostPublishCreate load post because of the rules
        // Post loaded again with DI
        ....
  1. 我尝试使用Rule 类进行自定义验证,但我不确定如何在不重新加载的情况下将记录传递给Rule

【问题讨论】:

    标签: laravel


    【解决方案1】:

    表单请求未加载记录。它只是验证 $request 对象中存在的参数。在第二个示例中,$post 由 DI 自动检索,然后您可以随意操作您的记录。

    【讨论】:

    • 您可能会查询数据库两次的唯一情况是使用像unique 这样的验证规则。但这在我看来不是问题,因为无论如何都应该单独处理请求验证和业务逻辑。
    • 我知道,但是我如何验证记录并在不运行两次查询的情况下使用 DI?这是我的问题,不是把我的代码放在哪里
    • 另请注意,验证是编写我的规则的地方。我想在表单请求中而不是在控制器中
    • 正如我所说,Form Request 没有在您的模型上运行查询。它只检查请求参数是否通过指定的验证规则。
    • 好的,我的验证规则是根据我的记录检查用户输入,因此我需要从数据库运行它
    猜你喜欢
    • 2019-05-06
    • 2021-06-12
    • 2021-09-20
    • 2019-06-04
    • 2016-09-02
    • 1970-01-01
    • 2014-09-02
    • 1970-01-01
    相关资源
    最近更新 更多