Zend Form: Как установить длину текстового ввода или элемента textarea?

По умолчанию элементы 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 ответов

Решение

Это сработает, если вы возьмете эти имена атрибутов и их нижний регистр.

Попробуй это:

$ text = new Zend_Form_Element_Text ('subject');

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

Использование setAttrib не повлияет на длину строки, так как этот атрибут распознается только при вводе текста. Попробуйте использовать валидатор для контроля длины строки. Обратите внимание, что вы также можете установить пользовательские сообщения об ошибках.

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

Я не эксперт, но вы пытались использовать строчные имена атрибутов? Это довольно липко, но если это сработает, это говорит о том, что в этом отношении язык нарушен.

Обычно рекомендуется добавлять атрибуты формы в свой класс 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
                ],
            ]
        );

}
Другие вопросы по тегам