Php Laravel 5.7:自定义验证规则。Can';不要使用注入构造函数的类

Php Laravel 5.7:自定义验证规则。Can';不要使用注入构造函数的类,php,laravel,Php,Laravel,我通过php-artisan-make:Rule创建了新规则,通过执行查询进行一些自定义验证 因此,在规则中,我创建了一个构造函数并注入了存储库,就像我过去在应用程序中的任何地方所做的那样 class UniqueWishListNameByUser implements Rule { private $wishListRepository; public function __construct( WishListRepository $wishListRep

我通过
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::\uu构造(),传入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.
        ],
    ];
}

您可以在表单请求的
rules
方法中插入自定义规则,如下所示:

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

您可以在
规则
方法的签名中键入所需的任何依赖项。它们将通过Laravel服务容器自动解决


您是否尝试过在最后不使用
()
new UniqueWishListNameByUser
Yes,相同的结果。我认为您的问题是您正在注入自定义规则的构造函数中的类没有得到解决,您正在寻找一种方法来实现它,而无需“通过调用app()->make()调用存储库类”。如果要从自定义规则的构造函数中的类型提示解析
WishListRepository
,则也需要从容器解析规则。其中一个可以实现的地方是
规则
方法。如果我没有弄清楚你的问题,请告诉我。
public function rules(UniqueWishListNameByUser $unique)
{
    return [
        'name' => [
            'required',
            'string',
            $unique
        ],
    ];
}