Проблемы с настраиваемым путем проверки Zend Form

Проблема:

Плагин по имени «Спам» не найден в реестре; используемые пути: Zend_Validate_: Zend/Validate/

У меня есть это в моем файле bootstrap.php (это НЕ класс):

include_once 'config_root.php';
set_include_path ( $PATH );

require_once 'Initializer.php';
require_once "Zend/Loader.php";
require_once 'Zend/Loader/Autoloader.php';

// Set up autoload.
$loader = Zend_Loader_Autoloader::getInstance ();
$loader->setFallbackAutoloader ( true );
$loader->suppressNotFoundWarnings ( false );

//resource Loader
$resourceLoader = new Zend_Loader_Autoloader_Resource(array(
                'basePath' => APPLICATION_PATH,
                'namespace' => '',
            ));

$resourceLoader->addResourceType('validate', 'validators/', 'My_Validate_');

$loader->pushAutoloader($resourceLoader);

Я назвал файл с именем Spam.php следующим образом:

application/validators/Spam.php

class My_Validate_Spam extends Zend_Validate_Abstract {

В классе формы у меня есть:

//HONEY POT
        $this->addElement(
                'text', 'honeypot', array(
                    'label' => 'Honeypot',
                    'required' => false,
                    'class' => 'honeypot',
                    'decorators' => array('ViewHelper'),
                    'validators' => array(
                        array(
                            'validate' => 'Spam'
                        )
                    )
                )
        );

Со всем этим я получаю:

Плагин по имени «Спам» не найден в реестре; используемые пути: Zend_Validate_: Zend/Validate/

Почему ?

Большое спасибо.


person MEM    schedule 22.06.2011    source источник


Ответы (1)


Вы должны добавить каталог, в котором у вас есть ваши пользовательские валидаторы, к пути префикса элементов формы. Например:

$elementPrefixPaths = 
    array(
        array(
            array(
                'prefix' => 'My_Validate_', 
                'path' => 'My/Validate', // 'application/validators' in your case
                'type' => 'validate',
            )
        )
    );
$form->addElementPrefixPaths($elementPrefixPaths);
// or, if your're inside the form, 
// $this->addElementPrefixPaths($elementPrefixPaths)
// before any elements make use of the validator.

«Путь» должен быть в вашем пути включения. Вы должны сделать то же самое с вашими пользовательскими фильтрами. Также существует аналогичный подход для пользовательских декораторов и элементов (вместо этого используется метод setPrefixPaths()).

Подробнее читайте здесь.

Ваш путь — «приложение/валидаторы», но было бы лучше следовать соглашению ZF по именованию классов и зеркалированию пути; поэтому вы должны поместить свой валидатор в каталог, такой как «My/Validate». Вы должны следовать этому соглашению во всех пользовательских расширениях ZF, которые вы разрабатываете (фильтры, помощники, плагины и т. д.). Это сделает вашу жизнь проще в долгосрочной перспективе. Кроме того, в качестве последнего предложения, не используйте «My_» в качестве префикса вашего класса, используйте что-то более личное, например, «Mem_» (учитывая ваш никнейм).

person faken    schedule 23.06.2011