2017-02-08 13 views
4

私は電子メールを送信し、cronで実行されるスタンドアロンスクリプトでMojoliciousのレンダリングエンジンを使用して.html.epテンプレートをレンダリングしたい:スタンドアロンのPerlスクリプトでMojoliciousレンダリングを使用するにはどうすればよいですか?

#!/usr/bin/perl 

use feature ':5.10'; 

use Mojo::Base -strict; 
use Mojolicious::Renderer; 
use Data::Dumper; 


my $renderer = Mojolicious::Renderer->new(); 
push @{$renderer->paths}, '/app/templates'; 

my $template = $renderer->get_data_template({ 
    template => 'template_name', 
    format => 'html', 
    handler => 'ep' 
}); 

print Dumper($template) . "\n"; 

しかし、$templateは常に定義されていません。

テンプレートファイルは/app/templates/template_name.html.epです。

私は間違っていますか?

+0

'get_data_template'はファイルではなく、' __DATA__'セクション用です。 – simbabque

+0

__DATA__セクションで動作するように管理されていますが、ファイルでも同じことができますか? – Victor

+0

私はそれを見つけました。私の更新を参照してください。 – simbabque

答えて

8

現在のソースコードファイルの__DATA__セクションからテンプレートを読み込むために使用されるMojo :: Rendererのget_data_templateを使用しています。

実際、Mojo :: Rendererはを使うのは間違っています。スタンドアロンのテンプレートエンジンであるMojo::Templateがモジュールとして必要です。

use Mojo::Template; 

my $mt = Mojo::Template->new(vars => 1); 
my $email_body = $mt->render_file('test.html.ep', { one => 1, two => 2 }); 
say $email_body; 

test.html.epで:

The magic numbers are <%= $one %> and <%= $two %>. 

出力:それは代わりに、引数リストの名前の変数を受け入れるよう

The magic numbers are 1 and 2. 

option varsが重要です。

+0

私はrender_to_stringを使用しようとしましたが、スタンドアロンスクリプトでは機能しません – Victor

+0

電子メールテンプレート全体をDATAセクションに入れようとしています – Victor

+0

@Victor '$ c'は私はそう思う。あなたはレンダラーのソースを読むべきです。ハンドラが必要です。そして、あなたは '_render_template'が自分自身で行うことの一部をすることができます。おそらく、テンプレートが適切に読み込まれるなら、それはちょうどうまくいくでしょう。 – simbabque

関連する問題