10

ZF1 では、次のコードを使用してメール本文をレンダリングしました。

// View erstellen
$view = new Zend_View();
// Layout erstellen
$layout = new Zend_Layout();

// HelperPath muss hier nochmals übergeben werden da es ein neues View Objekt ist.
$view->addHelperPath('Own/View/Helper', "Own_View_Helper_");

// ViewScript
$view->setScriptPath(APPLICATION_PATH . '/views/scripts/emails/');

// LayoutPath
$layout->setLayoutPath(APPLICATION_PATH . '/layouts/scripts/');

$layout->setLayout('layoutMail');
$layout->setView($view);

foreach ($assigns as $key => $value) {
    $view->assign($key,$value);
}

$layout->content = $view->render($templateName);
return $layout->render();

いろいろ試しましたが、ZF2ではこの機能を実現できません。私の実際のコードはこれです。しかし、標準のレイアウトを使用しているため、文字列で取得できません。

public function mailAction()
{
    $viewModel = new ViewModel();
    $viewModel->setTemplate("zhorty/test");
    $viewModel->setVariable('test', 'some value');
    return $viewModel;
}
4

5 に答える 5

11

ありがとうございました!あなたの答えは私を助けました!

コードを延長しました。そのため、レイアウト テンプレートも使用できます。

$view = new \Zend\View\Renderer\PhpRenderer();
$resolver = new \Zend\View\Resolver\TemplateMapResolver();
$resolver->setMap(array(
            'mailLayout' => __DIR__ . '/../../../../Application/view/layout/layout-mail.phtml',
            'mailTemplate' => __DIR__ . '/../../../view/zhorty/test.phtml'
    ));
$view->setResolver($resolver);

$viewModel = new \Zend\View\Model\ViewModel();
$viewModel->setTemplate('mailTemplate')
    ->setVariables(array(
    'test' => 'AlloVince'
));     

$content = $view->render($viewModel);

$viewLayout = new \Zend\View\Model\ViewModel();
$viewLayout->setTemplate('mailLayout')
     ->setVariables(array(
            'content' => $content
));

echo $view->render($viewLayout);
于 2013-01-18T09:17:43.783 に答える
6

Zend\View を Zend\Mail のテンプレートとして使用し、ZF2 に添付ファイルを追加する方法についてのブログ投稿が役に立てば幸いです。

中国語で書かれていますが、コードを読むだけで十分だと思います。また、Google翻訳の助けを借りてそれを読むことができます

于 2013-01-18T03:49:48.227 に答える
0

電子メールの送信には、次のモジュールをお勧めします: https://github.com/WasabiLib/Mail

モジュールは ZF2 メッセージに基づいており、サービスとして構成されています。そのため、サービスマネージャーに電話するだけです。

body メソッドは ZF2 ビューモデルを処理できます。以下の例を参照してください。

$mail = $this->getServiceLocator()->get("Mail");
$viewModel = new ViewModel(array('$yourVariable1' => 'yourContent1', $yourVariable2=>'yourContent2',...));
$viewModel->setTemplate("responsive");
$mail->setTo('recipient@domain.com');
$mail->setBody($viewModel);
$mail->send();

カスタマイズ可能なレスポンシブ メール テンプレートがバンドルされています。モジュールを application.config.php に追加するだけで、準備完了です。

于 2015-12-14T12:49:54.460 に答える
-1

@ user1986560の回答は完全ではありません。ルーターで「url」などの基本的なヘルパーが必要であり、場合によっては「basePath」も必要になるためです。

ここに完全なコードがあります -

$myApp=Zend\Mvc\Application::init(require 'config/application.config.php');
$sm=$myApp->getServiceManager();

$view=new \Zend\View\Renderer\PhpRenderer();
$view->getHelperPluginManager()->setServiceLocator($sm);
$basePathX='/your-folder-from-where-you-want-to-run';
$request=$myApp->getRequest();
if($request instanceof \Zend\Http\PhpEnvironment\Request){
    #die($request->getBasePath());
    $basePathX=$request->getBasePath();
}
$basePath1=explode('/', $basePathX);
/* please fix this path as your requirement */
array_pop($basePath1);
$bsPath=implode('/', $basePath1).'/';
/* following line will fix your router path, it is important */
$myApp->getMvcEvent()->getRouter()->setBaseUrl($bsPath);
$basePath=new \Zend\View\Helper\BasePath();
$basePath->setBasePath($bsPath);
$view->getHelperPluginManager()->setService('basePath', $basePath);
$urlHlpr=new \Zend\View\Helper\Url();
$urlHlpr->setRouter($myApp->getMvcEvent()->getRouter());
$view->getHelperPluginManager()->setService('url', $urlHlpr);

$resolver=new \Zend\View\Resolver\TemplateMapResolver();
$resolver->setMap(array(
        'wmsLayout' => APP_ROOT_PATH . 'module'.DS.'YourModule'.DS.'view'.DS.'layout'.DS.'layout1.phtml',
        'layout/left-menu' => APP_ROOT_PATH . 'module'.DS.'YourModule'.DS.'view'.DS.'layout'.DS.'left-menu.phtml',
));
$view->setResolver($resolver);

$viewModel = new \Zend\View\Model\ViewModel();
$tmpltFileToLoad=__DIR__ . DS.'your-file-to-render.phtml';
$tmpltIdx='_'.md5($tmpltFileToLoad);
$resolver->add($tmpltIdx, $tmpltFileToLoad);
$viewModel->setTemplate($tmpltIdx)->setVariables(array(
        'test' => 'shahadat hossain khan'
));
$content=$view->render($viewModel);

$viewLayout = new \Zend\View\Model\ViewModel();
$viewLayout->setTemplate('wmsLayout')->setVariables(array(
        'content' => $content,
        'anyOtherVariableForLayout'=>'layout variable value',
    ));
echo $view->render($viewLayout);

それが誰かの助けになることを願っています。

于 2015-09-15T07:49:26.523 に答える