我通过php artisan make:rule
取得了新的规则通过执行查询做一些自定义的验证。
所以规则里面我做了一个构造函数,并注入资源库为我所用整个应用程序到处做数十次。
class UniqueWishListNameByUser implements Rule
{
private $wishListRepository;
public function __construct(
WishListRepository $wishListRepository
) {
$this->wishListRepository = $wishListRepository;
}
}
然而,在passes
方法我不能使用注射类。
public function passes($attribute, $value)
参数太少的功能应用\规则\ UniqueWishListNameByUser :: __建设(),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();
你可以注入的形式请求rules
方法,如自定义规则:
public function rules(UniqueWishListNameByUser $unique)
{
return [
'name' => [
'required',
'string',
$unique
],
];
}
从Laravel的documentation:
您可以输入,提示您需要的
rules
方法的签名中的任何依赖性。他们将自动通过Laravel服务容器解决。