2013-05-31 51 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