プロセスの完了後に電子メールを送信する必要があるアプリに取り組んでいます。電子メールは HTML である必要があるため、ビューを電子メール メッセージの本文としてレンダリングするという優れたアイデアを思いついたので、「ここをクリックしてブラウザでこれを表示する」機能を実装できます。これはすべて、AbstractRestfulController を実装するコントローラー内で行われるため、ビュー自体はフロント エンド モジュールに存在し、ブラウザーを介して URL からアクセスできます。しかし、私は
RouteStackInterface インスタンスが提供されていません
ビューをレンダリングしようとするとエラーが発生します。
これは私のコードです:
use Zend\View\HelperPluginManager;
use Zend\View\Resolver;
use Zend\View\Renderer\PhpRenderer;
//Instantiate the renderer
$renderer = new PhpRenderer();
$resolver = new Resolver\TemplateMapResolver(array(
'layout' => realpath(__DIR__ . '/../../../../Application/view/layout/email.layout.phtml'),
'email/view' => realpath(__DIR__ . '/../../../../Application/view/application/email/view.phtml')
)
);
$renderer->setResolver($resolver);
$renderer->url()->setRouter($this->getEvent()->getRouter());
API ドキュメントで、RouteStackInterface を指定することでルーターを URL プラグインに設定できることを確認しました。したがって、最後の行です。しかし、それもうまくいかなかったようです。
同じビューを使用して、メッセージ本文にリンクを含む HTML 電子メール メッセージを送信し、URL を介してブラウザに表示したいと考えています。
これを達成する方法についてのアイデア/提案はありますか?
編集/解決策:
以下の dotwired の回答によると、サービス マネージャーからレンダラーのインスタンスを取得すると、プラグインが正しくインスタンス化されます。これはうまくいったコードです:
module.config.php:
array('view_manager' => array(
'template_map' => array(
'layout/email' => __DIR__ . '/../../Application/view/layout/email.layout.phtml',
'email/share' => __DIR__ . '/../../Application/view/application/email/share.phtml',
'email/view' => __DIR__ . '/../../Application/view/application/email/view.phtml',
),
),
);
REST コントローラー:
use Zend\View\Model\ViewModel;
//get the renderer
$renderer = $this->getServiceLocator()->get('Zend\View\Renderer\RendererInterface');
//Create the views
$shareView = new ViewModel(array('data' => $data));
$shareView->setTemplate('email/view');
$emailLayout = new ViewModel(array('subject' => $this->_subject, 'content' => $renderer->render($shareView)));
$emailLayout->setTemplate('layout/email');
//Render the message
$markup = $renderer->render($emailLayout);
サービス マネージャーのレンダラーを使用すると、$this->url() ビュー ヘルパーは問題なく動作します。