在textarea yii2 activeform中设置默认值时出现问题

时间:2015-12-27 07:29:02

标签: php yii2

我正在尝试将更新作为我的应用的一部分。我成功地从模型和控制器中获取DB中的现有内容,并将其传递到我的更新视图表单,并将其渲染为名为$twit的变量。

但是我想在$twit变量中将此内容用作我表单中以下textarea中的默认值,以便将其显示在textarea中以编辑和操作它并再次将其更新到我的DB。

在这种情况下,文本区域的属性是用内容填充textarea而不是空文本区域。

以下是我的更新视图代码,可通过$twit变量访问内容:

<?php
use yii\helpers\Html;
use yii\bootstrap\ActiveForm;
use yii\helpers\Url;

$model = new \app\models\Twit();
?>

<div class="container">
   <div class="row">
   <div class="col-md-12" >
               <div class="widget-area no-padding blank">
               <div class="status-upload">

                 <?php
                 $form = ActiveForm::begin([
                   'action' => ['twit/after-update-twit'],
                 ]);
                 ?>
                  <?= $form->field($model,'twit',[])->textarea(); ?>

                  <?= Html::SubmitButton('بروز رسانی',['class' => 'btn btn-success green']); ?>

                 <?php ActiveForm::end(); ?>
               </div><!-- Status Upload  -->
             </div><!-- Widget Area -->
           </div>
   </div>
</div>

这是我的控制器:

public function actionBeforeUpdateTwit($id = null)
{
    $twit = Twit::beforeUpdateTwit($id);
    return $this->render('update' , ['twit' => $twit]);
}

3 个答案:

答案 0 :(得分:2)

1)不要在您的视图中初始化$model变量,这违反了MVC原则。视图仅用于显示数据。将其作为参数从控制器传递。

2)要为新模型设置默认值并使其对用户可见,您需要在渲染之前为此属性指定值:

$model->yourAttribute = $defaultValue;

3)要为现有模型设置值,只需找到现有模型而不是创建新模型:

$model = $this->findModel($id);

<强>更新

您的变量包含名为$twit的现有模型,并且您使用包含新模型的$model,这就是为什么在textarea中没有显示任何内容。请改用:

<?= $form->field($model,'twit',[])->textarea(); ?>

或者将$ twit变量重命名为$ model并删除它:

$model = new \app\models\Twit();

从视图。

答案 1 :(得分:2)

在字段说明之前添加:

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

你可以像这样设置值

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

see this

答案 2 :(得分:0)

使用textInput(最终进行maxlength验证,如下面的示例所示)

<?= $form->field($model,'twit',[])->textInput(['maxlength' => 255]); ?>

但是您应该通过控制器传递模型,而不是在视图中创建新模型。 (您在视图中创建的Twit模型会隐藏您从控制器发送的模型)

在您的控制器中

public function actionUpdate($id)
{
    $model = $this->findModel($id);

    if ($model->load(Yii::$app->request->post()) && $model->save()) {
        return $this->redirect(['view', 'id' => $model->id]);
    } else {
        return $this->render('update', [
            'model' => $model,
        ]);
    }
}
protected function findModel($id)
{
    if (($model = Twit::findOne($id)) !== null) {
        return $model;
    } else {
        throw new NotFoundHttpException('The requested page does not exist.');
    }
}