Cakephp - 如何在电子邮件模板中循环遍历数组?

时间:2014-04-23 10:17:54

标签: php arrays cakephp cakephp-2.0 cakeemail

我可以为单个记录设置viewVars并成功发送邮件。当我想发送包含多条记录的电子邮件时,会出现问题。我找到了正确的记录,我可以将它们传递给我的邮件功能。问题在于,当我调试传递给邮件模板的数组时,我得到了一个

Notice (8): Undefined variable: vars [APP\View\Emails\html\latest_projects.ctp, line 1]

然而,就在错误之下,它确实显示了我想要的信息:

(int) 0 => array(
    'Project' => array(
        'id' => '809',
        'created' => '2014-04-23',
        'project_number' => 'SPN00000809',
    )
),
(int) 1 => array(
    'Project' => array(
        'id' => '810',
        'created' => '2014-04-23',
        'project_number' => 'SPN00000810',
    )
)

*为简洁起见,省略了某些字段。

如何在电子邮件模板中循环显示此数组?我已经像在视图中那样尝试了标准的foreach循环,但后来我得到了未定义的变量提供了foreach问题。有什么建议或意见吗?

3 个答案:

答案 0 :(得分:1)

//Pass your variable
$Email->viewVars(array('projects' => $projects));

//In your email body or template
<ul>
    <?php foreach ($projects as $project) { ?>
        <li><?php echo $project['Project']['project_number']; ?></li>
    <?php } ?>
</ul>

答案 1 :(得分:0)

documentation中所述: -

$Email->viewVars(array('value' => 12345));

您将能够在邮件模板中将其用作$ value。

就像将数组设置为'value'一样,您将能够将$ value用作数组。

答案 2 :(得分:0)

问题是数组传递了$ dataForView,它是由cake生成的,是一个组合(?)数组 - 意味着某些键是关联的,例如$ dataForView [&#39; content&#39;] =&gt ; &#39;&#39;,而其他键是(int)0 =&gt;阵列(); 收到的数组看起来像这样:

array(
  content => '',
  (int) 0 => array(
    Project => array(
      fieldName1 => value,
      fieldName2 => value
    )
  ),
  (int) 1 => array(
    Project => array(
      fieldName1 => value,
      fieldName2 => value
    )
  )
)

我发现如果我取消设置关联键(内容),我可以按照惯例循环遍历规范化数组。我是这样做的,它可能不是最好的方式,但它有效。

//remove associative key
unset($dataForView['content']);

//loop through array and output values
foreach($dataForView as $key=>$val):
echo $val['Project']['id']; //echo other info as well
endforeach;
debug($dataForView); 

谢谢大家的帮助。