php - Laravel 5.7:自定义验证规则。不能使用注入到构造函数的类
问题描述
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() 的参数太少,在第 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.
],
];
}
我应该在其他地方注入该类,还是应该通过调用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();
解决方案
rules
您可以在表单请求的方法中注入自定义规则,如下所示:
public function rules(UniqueWishListNameByUser $unique)
{
return [
'name' => [
'required',
'string',
$unique
],
];
}
来自 Laravel 的文档:
您可以在
rules
方法的签名中键入提示您需要的任何依赖项。它们将通过 Laravel 服务容器自动解析。