Reputation: 238717
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?
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');
Upvotes: 23
Views: 46425
Reputation: 6155
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
],
]
);
}
Upvotes: 0
Reputation: 1176
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'));
Upvotes: 4
Reputation: 2639
Try this:
$text = new Zend_Form_Element_Text('subject');
$text ->setAttrib('maxlength','100');
Upvotes: 5
Reputation: 38043
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.
Upvotes: 2
Reputation: 5658
It'll work if you take those attribute names and lowercase'em.
Upvotes: 19