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

Mat*_*cki 6 php laravel

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

因此,在规则中,我创建了一个构造函数并注入存储库,就像我以前在应用程序中的任何地方所做的几十次一样。

class UniqueWishListNameByUser implements Rule
{
    private $wishListRepository;

    public function __construct(
        WishListRepository $wishListRepository
    ) {
        $this->wishListRepository = $wishListRepository;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是在该passes方法中我无法使用注入的类。

public function passes($attribute, $value)
Run Code Online (Sandbox Code Playgroud)

函数 App\Rules\UniqueWishListNameByUser::__construct() 的参数太少,第 31 行 /home/vagrant/code/ios-portal/app/Http/Requests/Frontend/WishList/CreateWishListRequest.php 中传入的参数为 0,而预期为 1

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

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

我应该将类注入到其他地方,还是应该通过调用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();
Run Code Online (Sandbox Code Playgroud)

Ama*_*ade 7

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

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

来自 Laravel 的文档

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