不,你不能那樣做。
這個想法是,你只將依賴關係傳遞給構造函數,顯然data
不是。 Validator與數據一起工作,但不依賴於數據。
而是使用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