Laravel 5.7:自定义验证规则。无法使用注入到构造函数的类

时间:2019-02-06 23:14:23

标签: php laravel

我通过php artisan make:rule制定了新规则,以通过执行查询来进行一些自定义验证。

因此,在规则内部,我创建了一个构造函数并注入了存储库,就像我过去在整个应用程序中到处进行数十次一样。

class UniqueWishListNameByUser implements Rule
{
    private $wishListRepository;

    public function __construct(
        WishListRepository $wishListRepository
    ) {
        $this->wishListRepository = $wishListRepository;
    }
}

但是在passes方法中,我不能使用注入的类。

public function passes($attribute, $value)
  

函数的参数太少   App \ Rules \ UniqueWishListNameByUser :: __ construct(),传入0   /home/vagrant/code/ios-portal/app/Http/Requests/Frontend/WishList/CreateWishListRequest.php   在第31行,正好是1个

这是因为当我调用规则时,它希望我自己注入类。

public function rules()
{
    return [
        'name' => [
            'required',
            'string',
            new UniqueWishListNameByUser(), // <--- here no args.
        ],
    ];
}

我应该在其他地方注入该类,还是应该通过调用app()->make()来调用存储库类,除非需要,否则我不想这样做。

我想念什么吗?

编辑:

下面的代码可以工作,但是我想使用依赖注入,怎么办?

$wishlistRepository = app()->make(WishListRepository::class);

$exists = $wishlistRepository
    ->where('user_id', auth()->user()->id)
    ->where('customer_uuid', auth()->user()->defaultCustomer->uuid)
    ->where('name', $value)
    ->exists();

1 个答案:

答案 0 :(得分:0)

您可以在表单请求的rules方法中注入自定义规则,如下所示:

public function rules(UniqueWishListNameByUser $unique)
{
    return [
        'name' => [
            'required',
            'string',
            $unique
        ],
    ];
}

来自Laravel的documentation

  

您可以在rules方法的签名中键入所需的任何依赖项。它们将通过Laravel服务容器自动解决。