我是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”错误。
答案 0 :(得分:0)
错误本身意味着您的数组在索引1处没有值。您似乎已经得出错误在您的视图中而不是您的控制器的结论。
您的错误可能发生在视图之前,因为查看您的控制器代码,在每个条件中,您的代码类似于:
$someArray[$i]++;
由于$someArray[$i]
未定义,所有这些都会出错;你的所有数组都是空的。
我建议您填充数组以开始使用array_fill,例如:
$NPP = array_fill(1,52,0);
请注意,这忽略了控制器中的索引为1到30,而在视图中为1到52的事实。
为了将来参考,请确保包含您看到的完整错误消息,其中应包含文件和行号。我猜你是否看过这个错误,它会指向控制器中的一条递增线,而不是你的视图。