我怎么把ServiceLocator注入到验证器中?


Ho do I Inject ServiceLocator into validator?

我为其中一个表单字段创建了一个Validator。要做到这一点,我需要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);
    }
}

My Validator:

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;
}

问题是它没有检索我的错误消息,为什么?

您的工厂名称和您在配置中注册的名称不对应:

Maintenance'Factory'Validator'EcheancedebutFactory(在你的配置中)

Maintenance'Factory'Validator'EcheancedebFactory(类全称)

Echeancedebut vs . Echeancedeb .

在验证器中注入Sl是一个坏主意。我将通过控制器调用的inputFilter将我的选项作为参数传递。问题解决了。谢谢你的回答。