Как я могу ввести ServiceLocator в валидатор?

Я создал валидатор для одного из моих полей формы. Для этого мне нужен ServiceLocator, поэтому я хотел бы использовать фабрику …

Редактировать :

Вот моя фабрика:

namespace Maintenance\Factory\Validator;

/* Zend */
use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
/* Controller */
use Maintenance\Validator\Echeancedebut;

class EcheancedebutFactory implements FactoryInterface
{
public function createService(ServiceLocatorInterface $serviceLocator)
{
$realServiceLocator = $serviceLocator->getServiceLocator();

$maiContratService = $realServiceLocator->get(
'Maintenance\Service\Model\FMaiContratService'
);

return new Echeancedebut($maiContratService);
}
}

Мой валидатор:

class Echeancedebut extends AbstractValidator
{
const ERROR_DATEDEB = 'ERROR_DATEDEB';

protected $maiContratService;

protected $messageTemplates = array(
self::ERROR_DATEDEB => "Saisie inférieure à la date de début du contrat");

public function __construct($maiContratService) {
$this->maiContratService  = $maiContratService;
}

public function isValid($value){
$this->setValue($value);
if (!$this->validatedate($value)) {
$this->error(self::ERROR_DATEDEB);
return false;
}
return true;
}

private function validatedate($date) {
return false;
}
}

Редактировать :

Мой InputFilter:

public function getInputFilter()
{
if (! $this->inputFilter) {
$inputFilter = new InputFilter();
$this->inputFilter = $inputFilter;
}

$inputFilter->add(
array(
'name' => 'dateDeb',
'required' => true,
'allow_empty' => false,
'validators' => array(
array(
'name' => 'Date',
'locale' => 'FR_fr',
'options' => array(
'format' => 'd/m/Y',
),
),
array(
'name' => 'Maintenance\Validator\Echeancedebut',
'options' => array(
'contratId' => $this->iMaiContratId,
)
);

return $this->inputFilter;
}

Проблема в том, что он не получает мое сообщение об ошибке, почему?

0

Решение

Название вашей фабрики и имя, которое вы зарегистрировали в вашей конфигурации, не соответствуют:

Maintenance\Factory\Validator\EcheancedebutFactory (внутри вашего конфига)

Maintenance\Factory\Validator\EcheancedebFactory (полное название класса)

Echeancedebut против Echeancedeb,

Измени это, и я думаю, что это должно работать.

1

Другие решения

Хорошо, поэтому вставлять Sl в валидатор — плохая идея. Я передам свои параметры в качестве аргументов через inputFilter, вызываемый моим контроллером. Так что проблема решена. Спасибо за ваши ответы.

0

По вопросам рекламы [email protected]