Partials не разрешает переменные, переданные в него - PullRequest
1 голос
/ 17 января 2012

Я создаю задачу, которая будет периодически отправлять пользователям несколько электронных писем (портала, к которому относится эта задача). Для создания электронного письма я использую партиалы.

приложение / шаблоны / _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 и другие.

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

1 Ответ

1 голос
/ 18 января 2012

В соответствии с первой проблемой, В CLI Symfony файл php.ini отличается от модуля apache . Раньше я использовал Short_opening_tag, который я не заметил, что кроме print-php-операторов все остальные должны включать <?php вместо <?. Вот почему цикл foreach не может перебирать $ Popular_articles и другие.

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

...