Я создаю задачу, которая будет периодически отправлять пользователям несколько электронных писем (портала, к которому относится эта задача).
Для создания электронного письма я использую партиалы.
приложение / шаблоны / _email_plain.php:
Hi, <?= $login ?>
приложение / шаблоны / _email_html.php:
Hi, <?= $login ?>
К сожалению, после
$plain = get_partial('global/email_plain', array('login' => 'John Doe'));
$html = get_partial('global/email_html', array('login' => 'John Doe'));
и обе отправки по электронной почте или var_dump () в консоли задач я получаю
Hi, <?= $login ?>
переменная $login
не обработана.
Кто-нибудь сталкивался с такой проблемой?
Как это решить?
short_open_tag
включено -> Я использую его во всем проекте, и он работает. Однако я изменил все <?=
на <?php echo
только для проверки, и это волшебным образом (?) Работает. Это наводит меня на мысль, что Symfony CLI не читает main php.ini
.
Это не конец проблемы.
Задача также должна отправить несколько информационных бюллетеней с лучшими статьями за последнюю неделю.
$params = array('popular_articles' => $popular_articles, 'popular_threads' => $popular_threads);
Mailer::SendBulkMessage(
$this->getMailer(),
get_partial('global/email_weekly_newsletter_plain', $params ),
get_partial('global/email_weekly_newsletter_html', $params ),
$users,
'Weekly newsletter'
);
, где $articles
равно Doctrine_Collection
.
После
$partial = get_partial('global/partial, $partialParameters)
где я печатаю заголовок статей, которые я получаю в цикле foreach
, я получаю сообщение о том, что я использую ->getTitle()
для необъекта.
(частично $articles
класс sfOutputEscaperIteratorDecorator
)
Проблемный цикл из частичного:
<h3>Most commented articles</h3>
<? foreach( $popular_articles as $article ): //Line#10 ?>
<?php link_to( $article->getTitle(), $article->getUrlPath(), array('class' => 'newsletter-article-item') ); ?><br />
<? endforeach; ?>
<h3>Hottest discussions</h3>
<? foreach( $popular_threads as $thread ): ?>
<?php link_to( $thread->getTitle(), absoluteRoute::getRouteForForum('forum_thread_view', array('id' => $thread->getId())), array('class' => 'newsletter-article-item') ); ?><br />
<? endforeach; ?>
выше урожайности
Fatal error: Call to a member function getTitle() on a non-object in P:\ath\to\project\apps\content\templates\_email_weekly_newsletter_html.php on line 11
Call Stack:
0.0004 629696 1. {main}() P:\ath\to\project\symfony:0
0.0055 985544 2. include('P:\ath\to\project\lib\vendor\symfony\lib\command\cli.php') P:\ath\to\project\symfony:14
0.6824 9908768 3. sfSymfonyCommandApplication->run() P:\ath\to\project\lib\vendor\symfony\lib\command\cli.php:20
0.6841 9910728 4. sfTask->runFromCLI() P:\ath\to\project\lib\vendor\symfony\lib\command\sfSymfonyCommandApplication.class.php:76
0.6841 9911008 5. sfBaseTask->doRun() P:\ath\to\project\lib\vendor\symfony\lib\task\sfTask.class.php:97
0.7111 10729624 6. weeklyParentNewsletterTask->execute() P:\ath\to\project\lib\vendor\symfony\lib\task\sfBaseTask.class.php:68
1.4238 25474480 7. get_partial() P:\ath\to\project\lib\task\weeklyParentNewsletterTask.class.php:76
1.4255 25479424 8. sfPartialView->render() P:\ath\to\project\lib\vendor\symfony\lib\helper\PartialHelper.php:220
1.4265 25479784 9. sfPHPView->renderFile() P:\ath\to\project\lib\vendor\symfony\lib\view\sfPartialView.class.php:124
1.4277 25536920 10. require('P:\ath\to\project\apps\content\templates\_email_weekly_newsletter_html.php') P:\ath\to\project\lib\vendor\symfony\lib\view\sfPHPView.class.php:75
Решение
В соответствии с первой проблемой, в Symfony CLI php.ini
отличается от модуля apache.
Раньше я использовал Short_opening_tag, который я не заметил, что кроме printing-php-операторов все остальные должны включать <?php
вместо <?
.
Вот почему цикл foreach не может перебирать $popular_articles
и другие.
Спасибо за внимание.