【问题标题】:Yii $form->textfield, how to set a default value?Yii $form->textfield,如何设置默认值?
【发布时间】:2012-08-19 05:42:21
【问题描述】:

所以我在摆弄 Yii 框架,在其中一个视图中,特别是创建表单,我试图给我的一个文本字段一个默认值。因此,当我进入我的创建页面时,值已经预加载到表单上。

这是我当前的代码

<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>

当我按下创建时,Yii 给我一个错误,告诉我textField 是空的?不知道除了设置值我还能做什么。我是否也想设置模型属性?

【问题讨论】:

    标签: yii


    【解决方案1】:

    它对我有用:

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

    【讨论】:

    • 这样做不是一个好主意。该字段将始终具有此值,如果您想通过此表单更新模型,您将始终看到“您的值”而不是模型的值。
    • @NikolayTraykov 对,但也可以是 &lt;?= $form-&gt;field($model, 'some_field')-&gt;textInput(['readonly' =&gt; true, 'value' =&gt; $model-&gt;isNewRecord ? 'Your Value' : $model-&gt;some_field]); ?&gt;
    • 感谢两位的建议。我已经更新了适合创建和更新操作的答案。
    【解决方案2】:

    我相信 MVC 的做法是将默认值放在模型中:

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

    或者在你的控制器中:

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

    【讨论】:

      【解决方案3】:

      请使用array('readonly' =&gt; true) 而不是disabled

      【讨论】:

        【解决方案4】:
        <div class="row">
            <?php echo $form->labelEx($model,'teamlead'); ?>
            <?php echo $form->textField($model,'teamlead',array('readonly'=>'true',size'=>50,'maxlength'=>50,'value'=>Yii::app()->user->getUsername(),'disabled'=>'disabled')); ?>
            <?php echo $form->error($model,'teamlead'); ?>
        </div>
        

        array('readonly'=&gt;'true') 放入您的编码中它会起作用

        【讨论】:

          【解决方案5】:

          这是我将固定值发送到数据库并以只读方式显示该值的代码。

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

          【讨论】:

            【解决方案6】:

            总是,在模型类上处理数据(默认值、发生某事后的更改、数据处理等)是一个好主意。

            如果您在初始化模型后获取值,最好的方法是使用方法 init()。

            但是,如果你想在从数据库加载数据后改变,或者定义一个默认值,你可以使用afterFind()的方法

            例如:

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

            这个链接有很多关于这些方法的有用信息:http://www.yiiframework.com/doc/guide/1.1/en/database.ar#customization

            【讨论】:

              【解决方案7】:

              在字段描述之前添加:

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

              【讨论】:

              • 所以我把这一行放在 div 之前?
              • 没关系,我修复了它,但我必须在控制器中设置默认值。更具体地说,在 create 函数中。有没有办法在视图中设置它?
              • 只需在输出字段的上方视图中为 $model 变量设置该值。或者您可以将该值设置为模型的 init() 函数中的默认值
              • 默认值应该是模型区域 - 在视图中更改它会破坏 MVC 模式。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2010-11-25
              • 2012-11-10
              • 2019-04-25
              • 1970-01-01
              相关资源
              最近更新 更多