Cakephp - Как перебрать массив в шаблоне электронной почты?

Я могу установить 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. Любые советы или предложения?


person Cody    schedule 23.04.2014    source источник
comment
С этой небольшой информацией невозможно понять вашу проблему... Обновите вопрос с помощью контроллера и представления...   -  person Fazal Rasel    schedule 23.04.2014
comment
сначала попробуйте распечатать свой массив, чтобы убедиться, что он правильный. и сделайте свой html. затем передайте массив в шаблон электронной почты, как сказал @Rajeev Ranjan   -  person Fury    schedule 23.04.2014


Ответы (3)


как сказано в документации : -

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

вы сможете использовать его как $value в почтовом шаблоне.

точно так же, установив для вашего массива значение «значение», вы сможете использовать $value как массив.

person Rajeev Ranjan    schedule 23.04.2014
comment
Я понимаю, что, как сказано в вопросе, я могу получить переменные для одной записи, поэтому, если у меня есть 1 запись и я устанавливаю viewVars, это работает. Однако, когда я пытаюсь пройтись по массиву vars, чтобы отобразить значение нескольких записей, я получаю сообщение об ошибке. Вот содержание письма, которое я получаю: pastebin.com/bvF7FFLL - person Cody; 23.04.2014
comment
Я могу получить доступ к правильным значениям, используя $dataForView['0']['Project']['fieldName'], но проблема заключается в переборе ключей $dataForView. Я пробовал foreach($dataForView as $key=›$val), но не могу заставить его работать. - person Cody; 23.04.2014
comment
@ Коди Я не могу понять после кода, увиденного на pastebin, если у меня есть массив и я не могу с ним манипулировать. - person Rajeev Ranjan; 24.04.2014

Проблема заключалась в том, что переданный массив $dataForView, который генерируется cake, был массивом комбинаций (?), что означает, что некоторые ключи были ассоциативными, например $dataForView['content'] => '', а другие ключи были (целое)0 => массив(); Полученный массив выглядел так:

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

Спасибо всем за помощь.

person Cody    schedule 24.04.2014

person    schedule
comment
Проблема заключалась в том, что переданный массив $dataForView, который генерируется cake, был комбинированным (?) массивом, что означает, что некоторые ключи были ассоциативными, например $dataForView['content'] => '', в то время как другие ключи были (int)0 =› массив(); Я обнаружил, что если я отключу ассоциативные ключи, я смогу пройтись по массиву как обычно. Так что вы правы, но сначала мне пришлось нормализовать массив. - person Cody; 24.04.2014
comment
так ты получишь ответ?.. а потом что случилось? - person Fury; 24.04.2014