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

问题描述 投票:1回答:1

我通过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();
php laravel
1个回答
0
投票

你可以注入的形式请求rules方法,如自定义规则:

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

从Laravel的documentation

您可以输入,提示您需要的rules方法的签名中的任何依赖性。他们将自动通过Laravel服务容器解决。

© www.soinside.com 2019 - 2024. All rights reserved.