Проблемы с Zend Form Custom Validation - PullRequest
0 голосов
/ 22 июня 2011

Проблема:

Плагин с именем «Спам» не найден в реестре;используемые пути: 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 как это:

приложение / валидаторы / 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 /

Почему?

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

1 Ответ

0 голосов
/ 23 июня 2011

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

$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 ()).

Подробнее здесь .

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

...