ob_start() внутри цикла
У меня проблема при цикле с использованием цикла foreach() и внутри этого цикла с использованием ob_start() и ob_get_clean().
Вот моя функция:
protected function renderEmail() {
$template = $this->_case.".php";
if(is_file($this->_dir.DS.$template)) {
ob_start();
if(!empty($this->_records)) {
foreach($this->_records as $key => $value) {
${$key} = $value;
}
}
require_once($this->_dir.DS.$template);
return ob_get_clean();
} else {
$this->_errors[] = "Email template not found";
return false;
} }
Эта функция в основном генерирует содержимое письма и затем возвращает его.
У меня проблема, когда я перебираю несколько адресов электронной почты - чтобы отправить одно и то же содержимое электронной почты - только первый возвращает содержимое - следующие пустые - есть идеи, почему?
3 ответа
Хорошо - вы не поверите - как только я отправил этот вопрос - сразу после того, как я понял, в чем проблема - я использую функцию require_once() - которая предотвращает повторное включение того же файла - после того, как он был изменен, чтобы включить () все работает отлично!
Каждый раз, когда вы собираетесь использовать один и тот же файл несколько раз в цикле, вы никогда не должны использовать require_once() или include_once, вместо этого используйте "include", и все будет хорошо!
Почему циклы?
extract($this->_records);
выглядит немного короче
foreach($this->_records as $key => $value) {
${$key} = $value;
}
и родной в дополнение
и var_dump иногда очень помогает (в следующий раз вы столкнетесь с такими проблемами):)