0

問題:

「スパム」という名前のプラグインがレジストリに見つかりませんでした。使用したパス: 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/

なんで ?

どうもありがとう。

4

1 に答える 1

0

カスタムバリデーターがあるディレクトリをフォーム要素のプレフィックスパスに追加する必要があります。例えば:

$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/validators」ですが、クラスの命名とパスのミラーリングに関する ZF の規則に従うことをお勧めします。そのため、'My/Validate' などのディレクトリにバリデーターを配置する必要があります。開発するすべてのカスタム ZF 拡張機能 (フィルター、ヘルパー、プラグインなど) では、この規則に従う必要があります。長期的にはあなたの人生を楽にしてくれます。また、最後の提案として、「My_」をクラスのプレフィックスとして使用せず、「Mem_」などのより個人的なものを使用してください (ニックネームを考慮してください)。

于 2011-06-23T00:11:43.330 に答える