我通过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();
答案 0 :(得分:0)
您可以在表单请求的rules
方法中注入自定义规则,如下所示:
public function rules(UniqueWishListNameByUser $unique)
{
return [
'name' => [
'required',
'string',
$unique
],
];
}
来自Laravel的documentation:
您可以在
rules
方法的签名中键入所需的任何依赖项。它们将通过Laravel服务容器自动解决。