Zend Form: How to set the length of a text input or textarea element?

匿名 (未验证) 提交于 2019-12-03 02:49:01

问题:

By default Zend Form Text elements don't have a width specified. Textarea elements have a default of rows="24" and cols="80". But when I set a different value...

$body = new Zend_Form_Element_Textarea('body'); $body->setLabel('Body:')     ->setRequired(true)     ->setAttrib('COLS', '40')     ->setAttrib('ROWS', '4'); $this->addElement($body); 

...the attributes are only added, not changed:

<textarea name="body" id="body" COLS="40" ROWS="4" rows="24" cols="80"> 

What is the correct way to specify a width and height of a textarea element, and the column width of a text element?

Solution:

Apparently, you can't specify html attributes in capital letters or else it will add duplicate attributes.

To change the height and width of a text area element:

$textarea = new Zend_Form_Element_Textarea('body'); $textarea     ->setAttrib('cols', '40')     ->setAttrib('rows', '4'); 

To change the width of a text element:

$text = new Zend_Form_Element_Text('subject'); $text->setAttrib('size', '40'); 

回答1:

It'll work if you take those attribute names and lowercase'em.



回答2:

Try this:

$text = new Zend_Form_Element_Text('subject');

$text ->setAttrib('maxlength','100');



回答3:

Using the setAttrib will not affect the stringlength as that attribute is only recognised by text inputs. Try using a validator to control the string length. Note you can also set custom error messages.

$text = new Zend_Form_Element_Textarea( 'body' );         $text->      ->setLabel('Body:')                      ->setAttrib('cols', 50)                      ->setAttrib('rows', 4)                      ->addValidator('StringLength', false, array(40, 250))                      ->setRequired( true )                      ->setErrorMessages(array('Text must be between 40 and 250 characters')); 


回答4:

I'm not an expert, but have you tried using lowercase attribute names? It's pretty tacky but if it works it suggests the language is broken in this respect.



回答5:

Generally it is good practice to add your form attributes in your fieldset class (or form class depending on how you have set it up).

Here is an example:

class SomeFieldSet extends Fieldset {     /**      * @var \Doctrine\Common\Persistence\ObjectManager      * @access protected      */     protected $objectManager;      /**      * @param ObjectManager $objectManager      * @param SomeEntity $claimPrototype      * @param null $name      * @param array $options      */     public function __construct(         ObjectManager $objectManager,         SomeEntity $somePrototype,         $name = null,         $options = array()     ) {         parent::__construct($name, $options);          $this->objectManager = $objectManager;          $this->setHydrator(new DoctrineObject($objectManager));         $this->setObject($somePrototype);      }      public function init()     {          $this->add(             [                 'name'       => 'description',                 'type'       => 'textarea',                 'options'    => [                     'label' => 'Some Label',                     'instructions' => 'Some instruction',                 ],                 'attributes' => [                     'class' => 'form-control',                     'placeholder' => 'Some placeholder',                     'required' => 'required',                     'rows' => 10                 ],             ]         );  } 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!