Нет, вы не можете этого сделать.
Идея состоит в том, что вы передаете только зависимости конструктору, и, очевидно, data
не один. Валидатор работает с данными, но не зависит от данных.
Вместо этого используйте setter для данных.
class PostValidator
{
public function __construct(Validator $validator)
{
$this->validator = $validator;
}
public function setData($data)
{
$this->data = $data;
}
}
и просто назвать это явно:
$validator = App::make('PostValidator');
$validator->setData($data);
// or in the controller, which is what you're doing most likely
public function __construct(PostValidator $validator)
{
$this->validaotr = $validator;
}
public function update($id)
{
$data = Input::only([ input that you need ]);
$this->validator->setData($data);
// run the validation
...
}
редактировать: согласно комментарию, это то, что второй аргумент $parameters
делает:
// Foo class with Eloquent Models as dependencies
public function __construct(User $user, Category $category, Post $post)
{
$this->user = $user;
$this->category = $category;
$this->post = $post;
}
затем IoC контейнер разрешить зависимостей в качестве вновь созданных моделей:
$foo = App::make('Foo');
$foo->user; // exists = false
$foo->category; // exists = false
$foo->post; // exists = false
, но вы можете это сделать, если вы хотите:
$user = User::first();
$cat = Category::find($someId);
$foo = App::make('Foo', ['category' => $cat, 'user' => $user]);
$foo->user; // exists = true, instance you provided
$foo->category; // exists = true, instance you provided
$foo->post; // exists = false, newly instantiated like before
Спасибо за ваш ответ. Может быть, еще одна вещь, «App :: make» позволяет нам передать второй аргумент, для чего он используется? – xdim222
Он используется для предоставления конкретных экземпляров, если вы хотите - проверьте редактирование. –
Большое спасибо за ваше объяснение, я ценю это. – xdim222