如何在yii中为$ model分配数组

时间:2013-12-17 09:39:43

标签: php arrays yii

对不起。我缩短了我的问题,因为我认为,那些在yii上工作的用户可以很容易地理解我的问题,但现在我正在修改,这样你就可以轻松理解。

我想通过单个控制器/视图一次更新两个不同的表。

_form.php(更新表单)

<div class="form">

<?php $form=$this->beginWidget('CActiveForm', array(
    'id'=>'verse-form',
    'enableAjaxValidation'=>true,
)); ?>

    <p class="note">Fields with <span class="required">*</span> are required.</p>

    <?php echo $form->errorSummary($model); ?>

    <div class="row">
        <?php echo $form->labelEx($model,'topic_id'); ?>
        <?php echo $form->textField($model,'topic_id', $model->topic_id); ?>
        <?php echo $form->error($model,'topic_id'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'sorah_id'); ?>
        <?php echo $form->textField($model,'sorah_id', $model->topic_id); ?>
        <?php echo $form->error($model,'sorah_id'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'verse_text'); ?>
        <?php echo $form->textArea($model,'verse_text',array('rows'=>6, 'cols'=>50)); ?>
        <?php echo $form->error($model,'verse_text'); ?>
    </div>

    <?php

            $trans = array();

        foreach($model->verseTranslations as $p)
                {
                $trans[$p->id] = $p->translation_text;
                }


    ?>
    <div class="row buttons">
        <?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>
    </div>

       <?php $this->endWidget(); ?>

</div><!-- form -->

我的_form.php文件中有一个数组。

<?php

$trans = array();
foreach($model->verseTranslations as $p)
{
  $trans[$p->id] = $p->translation_text;
}

?>      

如果我写print_r($trans);它的输出就像这样。

Array ( [3] => In the name of ALLAH, most Gracious, most Compassionate. [4] => شروع الله کا نام لے کر جو بڑا مہربان نہایت رحم والا ہے [5] => En el nombre de Alá, el Compasivo, el Misericordioso ) 

现在我想在yii框架的_form.php文件中将此变量(即$trans)分配给$model,以便我可以在控制器上轻松访问它,然后轻松将其提交到单独的表中。 我也想在textArea中使用它。

希望你理解我的问题。

任何帮助将不胜感激。

感谢。

3 个答案:

答案 0 :(得分:0)

您无法从视图向控制器发送数组,但有一种方法(无专业方式)可以发送:

将它放在视图中的会话中(_form):

<?php  $_SESSION["t"]=$trans;?>

并在控制器中捕获它,然后销毁会话。

$trans=$_SESSION["t"];

最好在控制器本身执行此类操作,而不是在视图中执行此操作并将其传递给控制器​​!

答案 1 :(得分:0)

而不是在视图文件中执行此任务,您应该在控制器中执行此操作,如

 public function actionCreate()
    {
    $model=new MODELNAME;
// your rest of code
    $trans = array();
    foreach($model->verseTranslations as $p)
    {
      $trans[$p->id] = $p->translation_text;
    }
    // and then you can send this variable to the view by rendering the view file
    $this->render('create',array('model'=>$model,'trans'=>$trans));
    }

答案 2 :(得分:0)

像这样在模型上添加新属性。

class YOUR_MODEL_WITH_TRANS extends ParentModel
{
    public $trans;
    ---
}

转到您的视图文件并像这样轻松分配。

$model->trans=$trans;