2013-05-31 48 views
2

試圖在我的Package類中使用Validator類。現在使用Facade,包含類並使用它們變得有點棘手。Laravel 4 - 使用包中的驗證器進行驗證

use Illuminate\Validation\Validator 
... 
protected function valid($request) 
{ 
    return Validator::make($request, ['url'=>'required|url'])->passes(); 
} 

結束了給我:

PHP Fatal error: Call to undefined method Illuminate\Validation\Validator::make()

因爲我沒有使用門面本身,這是真的。縱觀Validator類的構造函數:

__construct(\Symfony\Component\Translation\TranslatorInterface $translator, array $data, array $rules, array $messages) : void 

這裏就是我需要幫助:)

+0

爲什麼你不使用門面的具體原因? – crynobone

+0

我確實想使用Facade,實際上這是我在這篇文章背後的目標.. – Mulkave

回答

6

如果你想使用驗證門面在你的包,那麼您的使用更改爲:

use Validator; 

或者:

use Illuminate\Support\Facades\Validator; 

或者你可以注入驗證工廠的實例(這是什麼實際上會使您的驗證器實例)作爲依賴項進入類。我假設你正在爲服務提供商設置你的軟件包,所以就像這樣。

$this->app->bind('Package', function($app) 
{ 
    return new YourPackage($app['validator']); 
}); 

然後,您應該在構造函數中爲該類設置驗證器屬性。

public function __construct(\Illuminate\Validation\Factory $validator) 
{ 
    $this->validator = $validator; 
} 

您現在應該可以創建一個新的驗證器實例。

return $this->validator->make($request, ['url' => 'required|url'])->passes(); 
+0

我建議不要使用Validator別名,因爲只有在啓動應用程序時纔會使用Validator別名。使用Illuminate \ Support \ Facades \ Validator或$ app ['validator'] – crynobone

+0

我相信這可以在服務提供商中使用,但測試呢? – Mulkave

+0

嘲諷驗證實例是在做單元測試的一個很好的方式,結帳嘲弄 – crynobone