如何将数组及其内容从控制器传递到视图

时间:2013-01-04 09:59:23

标签: php arrays yii

我是Yii的新手,我在将数组从控制器中的动作传递到视图时遇到问题,这样我就可以在视图中读取数组的内容了。

我的控制器:

public function actionReportAllWeeks()
{
    $user = YumUser::getById(Yii::app()->user->id);
    $format = 'Y-m-d';
    $clients = Client::model()->findAll();
    $UNI = array();$NPP = array();$DAN = array();$McC = array();$CAS = array();$LAC = array();
    foreach ($clients as $client) {
        $project_count = 0;
        $projects = Project::model()->findAll(array('condition'=>'client_id='.$client->id));
        for ($i=1; $i < 30; $i++) { 
            foreach ($projects as $project) {
                $date_created = $project->created;
                $createdDate = DateTime::createFromFormat($format, $date_created);
                $week_num = $createdDate->format('W');
                if ($client->shortname == 'UNI') {
                    if ($week_num == $i) {
                        $UNI[$i]++;
                    }
                }
                elseif ($client->shortname == 'NPP') {
                    if ($week_num == $i) {
                        $NPP[$i]++;
                    }
                }
                elseif ($client->shortname == 'DAN') {
                    if ($week_num == $i) {
                        $DAN[$i]++;
                    }
                }
                elseif ($client->shortname == 'McC') {
                    if ($week_num == $i) {
                        $McC[$i]++;
                    }
                }
                elseif ($client->shortname == 'CAS') {
                    if ($week_num == $i) {
                        $CAS[$i]++;
                    }
                }
                elseif ($client->shortname == '') {
                    if ($week_num == $i) {
                        $LAC[$i]++;
                    }
                }                       
            }
        }
    }

    $this->render('client/client', array('clients'=>$clients, 'UNI'=>$UNI, 'NPP'=>$NPP, 'DAN'=>$DAN, 'McC'=>$McC, 'CAS'=>$CAS, 'LAC'=>$LAC));
}

我的观点:

<table class="table table-striped table table-bordered" style="width:95%">
<thead>
  <tr>
    <th>Projects</th>
      <?php for ($i=1; $i < 52; $i++):?>
        <td style="text-align:center">Week <?php echo $i; ?></td>
      <?php endfor; ?>
  </tr>
</thead>
<tbody>
<?php foreach ($clients as $client): ?>
  <tr>
    <td><?php echo $client->name; ?></td>
    <?php for ($i=1; $i < 52; $i++):?>
      <td style="text-align:center">/*should echo some values from array*/</td>
    <?php endfor; ?>
  </tr>     
<?php endforeach;?>
</tbody>

当我尝试从任何数组中读取元素时,我得到“Undefined offset 1”错误。

1 个答案:

答案 0 :(得分:0)

错误本身意味着您的数组在索引1处没有值。您似乎已经得出错误在您的视图中而不是您的控制器的结论。

您的错误可能发生在视图之前,因为查看您的控制器代码,在每个条件中,您的代码类似于:

$someArray[$i]++;

由于$someArray[$i]未定义,所有这些都会出错;你的所有数组都是空的。

我建议您填充数组以开始使用array_fill,例如:

$NPP = array_fill(1,52,0);

请注意,这忽略了控制器中的索引为1到30,而在视图中为1到52的事实。

为了将来参考,请确保包含您看到的完整错误消息,其中应包含文件和行号。我猜你是否看过这个错误,它会指向控制器中的一条递增线,而不是你的视图。