【问题标题】:Zend Form Custom Filter Class not found未找到 Zend Form 自定义过滤器类
【发布时间】:2013-07-04 12:19:34
【问题描述】:

我的自定义 Zend 表单过滤器类没有被加载。

自定义过滤器类名称为:SF_Filter_AlnumDashes,它位于: 库/SF/Filter/AlnumDashes.php.

我已将“SF_”命名空间的自动加载配置到 application.ini:

autoloadernamespaces[] = "SF_"

但是当我在 Zend Form 创建过程中尝试加载类时,我得到了找不到类的错误: 致命错误:在...中找不到类“AlnumDashesUnderscore”

这是导致 Zend Form 类中的错误的代码:

class Admin_Form_Product_Generalinfo extends SF_Form_Abstract {

    public function init() {

        //set ID Attribute on the form element
        $this->setAttrib('id', 'product_general_info');

        $elementPrefixPaths = array(
                array(
                    array(
                        'prefix' => 'SF_Filter', 
                        'path' => 'SF/Filter/', // 'application/validators' in your case
                        'type' => 'filter',
                    )
                )
            ); 
        $this->addElementPrefixPaths($elementPrefixPaths);

    $this->addElement('text', 'title', array(

            'filters' => array('StringTrim', 'StripTags'),
            'validators' => array(
        array('StringLength', true, array(2, 250)),
            ),
            'required' => true,
            'label' => 'Title',
            'attribs' => array(
                'id' => 'title',
                'class' => 'inputbox'
             )

    ));

        $this->getElement('title')->addFilter(array(new AlnumDashesUnderscore(), array(1)));

}

我在“SF_”命名空间中有其他类可以成功加载,从控制器调用它们没有问题。

【问题讨论】:

    标签: zend-framework filter zend-form zend-form-element


    【解决方案1】:

    该类定义为SF_Filter_AlnumDashes,但您正在尝试创建AlnumDashesUnderscore 的新实例。这些类名需要匹配:

    $this->getElement('title')->addFilter(array(new SF_Filter_AlnumDashes(), array(1)));
    

    【讨论】:

    • 好吧,如果我这样做,我会得到这个异常:异常信息:消息:提供给 addFilter 的过滤器无效;必须是字符串或 Zend_Filter_Interface
    • 好的,这是一个单独的问题。过滤器必须实现Zend_Filter_Interface,因此您需要相应地修改您的自定义过滤器。
    • 过滤器类实现 Zend_Filter_Interface:class SF_Filter_AlnumDashes implements Zend_Filter_Interface
    • 您还需要将过滤器本身作为参数传递,而不是数组。所以你可能想要->addFilter(new SF_Filter_AlnumDashes(), array(1)));
    • 我现在遇到了另一个问题,我没有更改我的代码中的任何内容。 Exception caught by form: Plugin by name 'SF_Filter_AlnumDashes' was not found in the registry; used paths: Zend_Filter_: Zend/Filter/ Stack Trace...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-13
    • 1970-01-01
    • 2014-04-16
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多