Zend Form: Как установить длину текстового ввода или элемента textarea? - PullRequest
23 голосов
/ 22 декабря 2009

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

19 голосов
/ 22 декабря 2009

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

5 голосов
/ 05 октября 2012

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

$ text = new Zend_Form_Element_Text ('subject');

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

4 голосов
/ 07 января 2014

Использование 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'));
2 голосов
/ 22 декабря 2009

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

0 голосов
/ 18 марта 2016

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

}
...