適当な思いつきで書くブログ

UbuntuやPerlやJavaScriptやVimやZshやShellScriptやMySQLと戯れている中で適当な思いつきでやってみたことを書いています。

Template::Toolkitを使ってみたんだけど生成されたMyApp::View::TT.pmがちょっと変?

Web+DB Pressのvol.32にあるCatalystの特集でただいま"いろは"を勉強中です。

「Template::Toolkitでビューを描写してみる」の章でちょっとつまづいたのでメモ

この章の内容としては

hello.ttを作ってlocalhost:3000/helloにアクセスしてテンプレートベースのページを表示しよう

な感じです。

手順を簡単に…。

  • MyApp/lib/MyApp/View/TT.pmを生成
perl script/myapp_create.pl view TT TT
  • MyApp/myapp.ymlを修正
  • MyApp/lib/MyApp.pmにhelloメソッドを追加
  • MyApp/root/templates/hello.ttを作成

テンプレートが表示されない><

書いてある内容通りにすすめたのですが、いざlocalhost:3000/helloにアクセスしてみると

Caught exception in MyApp::View::TT->process "MyApp::View::TT directly inherits from Catalyst::View. You need to
inherit from a subclass like Catalyst::View::TT instead.
at /usr/lib/perl5/site_perl/5.8/Catalyst/Action.pm line 47"

のようなエラーが出てテンプレートがうまく表示できませんでした。

自分で入力したMyApp.pmを書き直してみたり、該当っぽいモジュールをインストールしてみたりしたのですが、結局直らず…。

原因は自動生成された"MyApp::View::TT.pm"でした

Perl先生に泣き付いた所、「MyApp::View::TTが悪いんじゃないの?」


確かに、MyApp/lib/MyApp/View/TT.pmがCatalyst::Viewを呼んでいたので、

package MyApp::View::TT;

use strict;
use warnings;
use base 'Catalyst::View';

直接、Catalyst::View::TTを呼べば直りました。

#use base 'Catalyst::View';
use base 'Catalyst::View::TT';

(感想)

自動で生成されたものにエラーがあるとは…><