Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Zend framework 将变量传递给自定义Zend表单元素_Zend Framework_Zend Form_Zend Form Element - Fatal编程技术网

Zend framework 将变量传递给自定义Zend表单元素

Zend framework 将变量传递给自定义Zend表单元素,zend-framework,zend-form,zend-form-element,Zend Framework,Zend Form,Zend Form Element,我正在尝试创建一个自定义表单元素,该元素使用验证器扩展Zend_form_element_文本(因此,在使用某些元素时,我不必一直设置验证器)。无论如何,当我在主窗体中实例化$maxChars变量时,我很难将它传递给它。我在下面提供了我的缩短代码 这是我下面的自定义元素 class My_Form_Custom_Element extends Zend_Form_Element_Text { public $maxChars public function init() { $thi

我正在尝试创建一个自定义表单元素,该元素使用验证器扩展Zend_form_element_文本(因此,在使用某些元素时,我不必一直设置验证器)。无论如何,当我在主窗体中实例化$maxChars变量时,我很难将它传递给它。我在下面提供了我的缩短代码

这是我下面的自定义元素

class My_Form_Custom_Element extends Zend_Form_Element_Text
{

public $maxChars

public function init()
{
    $this->addValidator('StringLength', true, array(0, $this->maxChars))
}

public function setProperties($maxChars)
{
    $this->maxChars= $maxChars;
}
}
这是我实例化自定义表单元素的地方。

class My_Form_Abc extends Zend_Form
{
public function __construct($options = null)
{
    parent::__construct($options);
    $this->setName('abc');

    $customElement = new My_Form_Custom_Element('myCustomElement');
    $customElement->setProperties(100); //**<----This is where i set the $maxChars**

    $submit = new Zend_Form_Element_Submit('submit');
    $submit ->  setAttrib('id', 'submitbutton');

    $this->addElements(array($customElement ,$submit));
}
}
class My\u Form\u Abc扩展了Zend\u Form
{
公共函数构造($options=null)
{
父项::_构造($options);
$this->setName('abc');
$customElement=新的我的表单自定义元素('myCustomElement');
$customElement->setProperties(100);//**setAttrib('id','submitbutton');
$this->addElements(数组($customElement,$submit));
}
}
当我试图在表单中使用$customElement->setProperties(100)传递'100'时,它无法正确地传递给我的StringLength验证器。我想这是因为验证器在Init中被调用了?如何修复此问题?

init()
是在创建元素时调用的,因此在调用
setProperties()
之前,
$maxChars
不会被设置

我看到两种解决办法:

1-删除
init()
并将
addValidator()
移动到
setProperties()
方法:

public function setProperties($name, $value)
{
    switch( $name ) {
        case 'maxChars':
            $this->addValidator('StringLength', true, array(0, $value));
            break;
    }
    return $this;
}
2-执行在
render()
中的
init()
中所做的操作-元素在最后呈现

public function render()
{
    $this->addValidator('StringLength', true, array(0, $this->maxChars))
    return parent::render();
}

我认为第一个更好。

谢谢,伙计,我不知道为什么我没有想到第一个解决方案。第二种解决方案对我来说是新的,它们都很有效。干杯=)