2013-05-31 2 views
2

Попытка использования класса Validator в моем классе пакета. Теперь с Facades стало немного сложно включать классы и использовать их.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']); 
}); 

Затем вы должны установить свойство validator для этого класса в конструкторе.

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

Теперь вы можете создать новый экземпляр валидатора.

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

Я бы посоветовал не использовать псевдоним Validator, поскольку это было бы доступно только при загрузке приложения. Используйте Illuminate \ Support \ Facades \ Validator или $ app ['validator'] – crynobone

+0

Я считаю, что это работает у поставщика услуг, но как насчет тестирования? – Mulkave

+0

высмеивать экземпляр валидатора был бы хорошим способом проведения модульного тестирования, проверка Mockery – crynobone

Смежные вопросы