Использование пользовательского Zend Validator в файле INI

У меня нет собственного Zend_Form, и я просто объявил все элементы в ini-файле. Нет проблем с созданием Zend_Form из ini-файла, но у меня проблема с использованием моего собственного валидатора в моем ini-файле. Он всегда возвращает ошибку «Не найдено в реестре».

В настоящее время мой код выглядит так.

[Bootstrap]

$resourceLoader = new Zend_Loader_Autoloader_Resource(array(
            'namespace' => 'MY',
            'basePath'  => dirname(__FILE__)
        ));

$resourceLoader->addResourceType('validator', 'forms/validate/', 'Form_Validate');

[ini file]
form.elements.new_password.options.validators.password.validator = "Password"

[Custom Validator]
<?php 

class MY_Form_Validate_Password extends Zend_Validate_Abstract
{
......

Скажите, пожалуйста, что мне здесь не хватает. Спасибо!


person artsylar    schedule 13.05.2013    source источник
comment
Я считаю, что ваша ссылка ini верна ... Я думаю, вам просто нужно изменить MY на MY_ в значении вашего пространства имен в автозагрузчике ресурсов   -  person Orangepill    schedule 13.05.2013
comment
спасибо, что нашли время ответить на мой вопрос. Я попробовал ваше предложение, но, к сожалению, оно тоже не сработало.   -  person artsylar    schedule 13.05.2013
comment
попробуйте добавить _ в конец Form_Validate в вызове addResourceType   -  person Orangepill    schedule 13.05.2013
comment
еще раз спасибо, но это все еще не работает. :(   -  person artsylar    schedule 13.05.2013
comment
у вас есть пространство имен My_, указанное в вашем autoloaderNamespaces в ini? autoloaderNamespaces.My = My_ и путь, ведущий к родительскому пути Мои каталоги в пути включения?   -  person Orangepill    schedule 13.05.2013
comment
он действительно работает для других типов ресурсов, кроме валидатора.   -  person artsylar    schedule 13.05.2013
comment
Так что я так понимаю месторасположение. Относительно папки, содержащей файл начальной загрузки, у вас есть файл, расположенный по адресу `forms / validate / Password.php, который содержит класс, описанный в OP? Каково точное описание ошибки, которую вы получаете.   -  person Orangepill    schedule 13.05.2013


Ответы (1)


Это случай чрезмерного обдумывания:

Я предполагаю, что вы используете довольно новую версию ZF1.x (v1.10 и новее).

У вас есть файл project/application/configs/application.ini

в стандартном application.ini есть строка:

includePaths.library = APPLICATION_PATH "/../library"

это говорит нам, что весь код нашей библиотеки (квалифицируется настраиваемый валидатор) будет принадлежать каталогу по этому пути.

Также есть строчка:

autoloaderNamespaces[] = "MY_"

Это сообщает нам имя нашей библиотеки (определяет каталог ниже / library).

поэтому наш пользовательский валидатор MY_Form_Validate_Password будет жить по адресу:

project
    /library
        /MY 
            /Form
                /Validate
                    Password.php

больше ничего не требуется, весь этот код начальной загрузки нужен только в том случае, если вы собираетесь делать что-то, чего не ожидает Zend Framework, кроме того, валидаторы обычно не регистрируются как ресурсы.

Класс можно назвать

$validator = new MY_Form_Validate_Password();

как обычно, и любой другой метод доступа также должен работать.

person RockyFord    schedule 13.05.2013
comment
спасибо @RockyFord. Что, если я собираюсь вызвать его из ini файла? - person artsylar; 14.05.2013
comment
Файлы .ini - это ваш бизнес, валидатор должен быть доступен независимо от того, какой метод используется для его вызова. Как только файл станет доступен автозагрузчику, все методы доступа должны работать. - person RockyFord; 14.05.2013
comment
Спасибо за ваш ответ. Но я не использую здесь собственный класс формы, поэтому все записано в моем ini-файле. - person artsylar; 23.05.2013