0

コマンド ライン経由でメールを送信するために、zf2 アプリケーションでコンソール ルートを作成しました。したがって、私のアクションでは、ドキュメント(http://framework.zend.com/manual/2.0/en/modules/zend.view.renderer.php-renderer.html)で指定されているように新しい PhpRenderer を作成して、メールをレンダリングしていますテンプレート (変数などを置き換える) を作成してディスパッチします。

私が使用しているコードは次のとおりです。

  $renderer = new \Zend\View\Renderer\PhpRenderer();
  $resolver = new \Zend\View\Resolver\TemplateMapResolver();

  $resolver->setMap(array(
    'mailTemplate' => $config['template']
  ));

  $renderer->setResolver($resolver);

  $model = new \Zend\View\Model\ViewModel();
  $model->setTemplate('mailTemplate');

  $model->setVariables(array(
    'recipient' => 'foo@bar.com'
  ));

  $emailBody = $renderer->render($model);

.phtmlただし、Phprenderer はファイル内の PHP をレンダリングしていないようです。ただし、通常の HTTP リクエストで実行すると、まったく同じコードが正しく機能します。

誰でもこれで私を助けてくれますか?

4

1 に答える 1

3

リゾルバーへの正しいパスを設定していないためだと思われます。

参考までに、これは私が取ったアプローチです:

    // render HTML and TEXT bodies
    $basePath = realpath(__DIR__ . '/../../../view/emails');

    $htmlFilename = 'body.html.phtml';
    $txtFilename = 'body.txt.phtml';

    $renderer = new PhpRenderer();
    $renderer->resolver()->addPath($basePath);

    $sm = $this->getServiceManager();
    $renderer->setHelperPluginManager($sm->get('ViewHelperManager'));

    $model = new ViewModel();
    $model->setVariable('name', $user->getName());

    $model->setTemplate($txtFilename);
    $textContent = $renderer->render($model);

    $model->setTemplate($htmlFilename);
    $htmlContent = $renderer->render($model);
于 2013-02-25T20:25:40.640 に答える