web-dev-qa-db-ja.com

Zendフォーム:テキスト入力または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');
23
Andrew

これらの属性名と小文字を使用すれば機能します。

19
Derek Illchuk

これを試して:

$ text = new Zend_Form_Element_Text( 'subject');

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

5

その属性はテキスト入力によってのみ認識されるため、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'));
4
user466764

私は専門家ではありませんが、小文字の属性名を使用してみましたか?それはかなり粘着性がありますが、それが機能する場合、言語がこの点で壊れていることを示唆しています。

2

一般に、フィールド属性をフィールドセットクラス(または設定方法に応じてフォームクラス)に追加することをお勧めします。

次に例を示します。

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

}
0
HappyCoder