web-dev-qa-db-fra.com

Yii $ form-> textfield, comment définir une valeur par défaut?

Je manipule donc le framework Yii et, dans l'une des vues, en particulier le formulaire de création, j'essaie de donner une valeur par défaut à l'un de mes champs de texte. Par conséquent, lorsque je vais sur ma page de création, les valeurs sont déjà préchargées sur le formulaire.

Voici mon code actuel

<div class="row">
    <?php echo $form->labelEx($model,'teamlead'); ?>
    <?php echo $form->textField($model,'teamlead',array('size'=>50,'maxlength'=>50,'value'=>Yii::app()->user->getUsername(),'disabled'=>'disabled')); ?>
    <?php echo $form->error($model,'teamlead'); ?>
</div>

Lorsque j'appuie sur create, Yii me donne une erreur en me disant que textField est vide? Pas sûr de ce que je peux faire d'autre que de définir la valeur. Suis-je également censé définir les attributs du modèle?

18
user1436497

avant que la description du champ ajoute ceci:

<?php
$model->teamlead='my default value';
?>
18
zuups

Cela fonctionne de mon côté:

<?= $form->field($model, 'some_field')->textInput(['readonly' => true, 'value' => 'Your Value']) ?>
16
Imtiaz

C'est toujours une bonne idée de traiter les données (valeurs par défaut, modifications après un événement, traitement des données, etc.) de la classe de modèle.

Si vous obtenez la valeur après l'initialisation du modèle, le meilleur moyen consiste à utiliser la méthode init (). 

Toutefois, si vous souhaitez modifier ou définir une valeur par défaut après le chargement des données de la base de données, vous pouvez utiliser la méthode afterFind ()

Par exemple: 

public function afterFind(){
    $this->localdate = date("Y-m-d");
    parent::afterFind();
}

Ce lien contient de nombreuses informations utiles sur ces méthodes: http://www.yiiframework.com/doc/guide/1.1/en/database.ar#customization

5
Eduardo Moratto

Voici mon code que j'envoie une valeur fixe dans la base de données et affiche cette valeur en lecture seule. 

<?php echo $form->textField($model,'pp_status', array('value'=>'Open', 'readonly' => 'true')); ?>
4
Selim Reza

Veuillez utiliser array('readonly' => true) au lieu de disabled.

4
user2605615

Je pense que la méthode MVC consiste à placer votre valeur par défaut dans votre modèle:

class MyModel extends \yii\db\ActiveRecord
{
    public $teamlead = 'my default value';
    ....
}

Ou dans votre contrôleur:

class MyModelController extends Controller
{
    public function actionCreate()
    {
        $model = new MyModel ();
        $model->teamlead = 'my default value';
        ...
    }
}
1
Glicious