2014-04-23 13 views
0

我可以爲單個記錄設置viewVars並將其成功發送。當我想發送包含多條記錄的電子郵件時,會發生問題。我找到了正確的記錄,並且能夠將它們傳遞給我的郵件功能。這個問題是在,當我調試傳遞給郵件模板數組,我得到一個Cakephp - 如何遍歷電子郵件模板中的數組?

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問題。任何建議或建議?

+0

有了這個小信息,它不可能理解你的問題...更新與控制器和視圖的問題... –

+0

首先嚐試打印你的陣列,看看它是否正確。並讓你的HTML。然後將數組傳遞給電子郵件模板@Rajeev Ranjan表示 – Fury

回答

0

documentation說: -

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

,你將能夠使用它作爲郵件模板$值。

就像將數組設置爲'value'一樣,您將可以使用$ value作爲數組。

+0

據我所知,正如問題所述,我能夠獲得單個記錄的變量,所以如果我有1條記錄,並且我設置了他的viewVars,它就可以工作。但是,當我嘗試循環訪問變量數組以回顯多個記錄的值時,我得到一個錯誤。這是我收到的郵件的內容:http://pastebin.com/bvF7FFLL – Cody

+0

我可以通過使用$ dataForView ['0'] ['Project'] ['fieldName']來訪問正確的值,但麻煩是循環遍歷$ dataForView的鍵。我已經嘗試foreach($ dataForView作爲$ key => $ val),但我似乎無法讓它工作。 – Cody

+0

@Cody在pastebin上看到的代碼後,我無法理解,如果我有數組,並且無法操作它。 –

0
//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> 
+0

問題在於數組傳遞時,由cake生成的$ dataForView是一個組合(?)數組 - 意味着某些鍵是關聯的,例如$ dataForView ['content'] =>'',而其他鍵(int)0 => array();我發現如果我取消了聯合鍵,我可以正常地循環訪問數組。所以你是對的,但我必須首先規範化數組。 – Cody

+0

所以你得到答案?..然後發生了什麼? – Fury

0

的問題是,該陣列通過,$ dataForView,這是由餅產生,是一個組合陣列(?) - 這意味着某些鍵是締合如$ dataForView [「內容」] =>' ',而其他鍵是(int)0 => array(); 接收陣列看起來這樣:

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); 

謝謝大家的幫助。