Zend Form:如何设置文本输入或textarea元素的长度?

时间:2009-12-22 19:37:16

标签: zend-form

默认情况下,Zend Form Text元素没有指定宽度。 Textarea元素的默认值为rows="24"cols="80"。但是当我设定不同的价值时......

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

...只添加属性,而不是更改:

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

指定textarea元素的宽度和高度以及文本元素的列宽的正确方法是什么?

解决方案:

显然,您不能用大写字母指定html属性,否则它会添加重复的属性。

要更改文本区域元素的高度和宽度:

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

要更改文本元素的宽度:

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

5 个答案:

答案 0 :(得分:19)

如果你使用那些属性名称和小写'em。它将起作用。

答案 1 :(得分:5)

试试这个:

$ text = new Zend_Form_Element_Text('subject');

$ text - &gt; setAttrib('maxlength','100');

答案 2 :(得分:4)

使用setAttrib不会影响stringlength,因为该属性仅由文本输入识别。尝试使用验证器来控制字符串长度。请注意,您还可以设置自定义错误消息。

$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'));

答案 3 :(得分:2)

我不是专家,但您尝试使用小写属性名称吗?它非常俗气,但如果它有效,它表明语言在这方面被打破了。

答案 4 :(得分:0)

通常,最好在fieldset类(或表单类中)添加表单属性,具体取决于您的设置方式。

以下是一个例子:

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
                ],
            ]
        );

}