【问题标题】:issue in setting default value in textarea yii2 activeform在 textarea yii2 activeform 中设置默认值的问题
【发布时间】:2015-12-27 07:29:01
【问题描述】:

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

但我想在我的表单中使用$twit 变量中的此内容作为以下文本区域中的默认值,以便将其显示到文本区域中以对其进行编辑和操作,然后再次将其更新到我的数据库中。

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

这是我的更新视图代码,内容可通过$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]);
}

【问题讨论】:

  • 显示beforeUpdateTwit 方法内容。您只想设置数据库中现有模型的值吗?

标签: php yii2


【解决方案1】:

在字段描述之前添加:

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

你可以这样设置值

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

see this

【讨论】:

    【解决方案2】:

    1) 不要在你看来初始化$model 变量,它违反了MVC 原则。 View 仅用于显示数据。而是将其作为参数从控制器传递。

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

    $model->yourAttribute = $defaultValue;
    

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

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

    更新:

    您的变量包含名为$twit 的现有模型,而您使用包含新模型的$model,这就是为什么在文本区域中没有显示任何内容。改用这个:

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

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

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

    从视图。

    【讨论】:

    • 我也刚刚添加了我的控制器,你能告诉我在哪里设置默认值
    【解决方案3】:

    使用textInput(最终使用如下示例中的最大长度验证)

    <?= $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.');
        }
    }
    

    【讨论】:

    • 那么如何将内容设置为默认值?
    • 您在控制器中执行此操作。向我展示与此视图相关的控制器操作,以便我向您解释..
    • 公共函数 actionBeforeUpdateTwit($id = null) { $twit = Twit::beforeUpdateTwit($id); return $this->render('update' , ['twit' => $twit]); }
    • @saisEdge 我用渲染发送我的内容,我想把它作为默认值放在我的表单字段中
    • @SobhanBagheri 更新您的问题并添加格式正确的代码.. 更好
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    • 2017-11-10
    • 1970-01-01
    相关资源
    最近更新 更多