web-dev-qa-db-fra.com

ZEND FORMULAIRE: Comment définir la longueur d'une entrée de texte ou d'un élément textarea?

Par défaut, les éléments de texte ZEND ne sont pas spécifiés de largeur. Les éléments textarea ont une valeur par défaut de rows="24" et cols="80". Mais quand j'ai défini une valeur différente ...

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

... Les attributs ne sont ajoutés que: non changé:

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

Quelle est la bonne façon de spécifier une largeur et une hauteur d'un élément textarea et la largeur de colonne d'un élément de texte?

Solution:

Apparemment, vous ne pouvez pas spécifier les attributs HTML en lettres majuscules, sinon il ajoutera des attributs en double.

Pour changer la hauteur et la largeur d'un élément de zone de texte:

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

Pour changer la largeur d'un élément de texte:

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

Cela fonctionnera si vous prenez ces noms d'attributs et minuscules.

19
Derek Illchuk

Essaye ça:

$ text = nouveau zend_form_element_text ("sujet");

$ text -> setattrib ('Maxlength', '100');

5

L'utilisation de SETATTRIB n'affectera pas la longueur de StringLeD car cet attribut n'est reconnu que par des entrées de texte. Essayez d'utiliser un validateur pour contrôler la longueur de la chaîne. Remarque Vous pouvez également définir des messages d'erreur personnalisés.

$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

Je ne suis pas un expert, mais avez-vous essayé d'utiliser des noms d'attributs minuscules? C'est assez collant mais si cela fonctionne, il suggère que la langue est cassée à cet égard.

2
peter.murray.rust

Généralement, il est une bonne pratique d'ajouter vos attributs de formulaire dans votre classe de champs (ou de la classe de formulaire en fonction de la façon dont vous l'avez configuré).

Voici un exemple:

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