我正在尝试将更新作为我的应用的一部分。我成功地从模型和控制器中获取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]);
}
答案 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']) ?>
答案 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.');
}
}