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)
rules
您可以在表单请求的方法中注入自定义规则,如下所示:
public function rules(UniqueWishListNameByUser $unique)
{
return [
'name' => [
'required',
'string',
$unique
],
];
}
Run Code Online (Sandbox Code Playgroud)
来自 Laravel 的文档:
rules
您可以在方法的签名中键入提示所需的任何依赖项。它们将通过 Laravel 服务容器自动解析。
归档时间: |
|
查看次数: |
3761 次 |
最近记录: |