Подтвердить что ты не робот

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

По умолчанию элементы текста формы Zend не имеют указанной ширины. Элементы 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');
4b9b3361

Ответ 1

Он будет работать, если вы возьмете имена этих атрибутов и строчные буквы.

Ответ 2

Попробуйте следующее:

$text = новый Zend_Form_Element_Text ('subject');

$text → setAttrib ('maxlength', '100');

Ответ 3

Использование 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'));

Ответ 4

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

Ответ 5

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

}