可以在视图中创建与控制器相同的表单元素

时间:2012-09-24 12:50:16

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

创建下面的表单元素的第一种方法 -

*在控制器

    $email = new Zend_Form_Element_Text('email');

    $email->setLabel('Email address')

          ->addFilter('StringToLower')

          ->setRequired(true)

          ->addValidator('NotEmpty', true)

          ->addValidator('EmailAddress'); 

创建下面的表单元素的第二种方法 -

*在视图中

echo $this->formText('email',$this->data['email'],array('size'=>'20', 'class'=>'input_min_max'));

是否可以在第二种方法中创建与第一种方法相同的元素,如添加addFilter,addValidator等。 setLabel不是必需的becoz我们在元素之前添加了标签吗?

3 个答案:

答案 0 :(得分:0)

是的,您可以在视图中执行此代码:

$email = new Zend_Form_Element_Text('email');
$email->setLabel('Email address')
      ->addFilter('StringToLower')
      ->setRequired(true)
      ->addValidator('NotEmpty', true)
      ->addValidator('EmailAddress'); 

但是不应该,因为它违反了MVC模式。 或许你可以更好地解释你想做什么......也许我不理解......

答案 1 :(得分:0)

我很确定你不能用你的第二种方法创建一个元素,但还有另一种方法可以通过因子分解来创建它,在你的情况下你可以这样做:

$formText = createElement('email',$this->data['email'],array('size'=>'20', 'class'=>'input_min_max)->setRequired(true)->addValidator('whatever');

希望这会回答你的问题。

答案 2 :(得分:0)

不确定为什么要在视图中插入表单元素。如果这是用于样式化,则可以使用视图脚本作为装饰器。

表格:

 $email = new Zend_Form_Element_Text('email');

 $email->setLabel('Email address')

      ->addFilter('StringToLower')

      ->setRequired(true)

      ->addValidator('NotEmpty', true)
      -> setDecorators(array(array('ViewScript', array('viewScript' => 'index/myform.phtml'))))

      ->addValidator('EmailAddress');

这将调用视图脚本“myform.phtml”来装饰元素,在其中可以添加标记的其余部分来装饰元素。