文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>第四章 掌握View 第三节 把TT作为View使用

第四章 掌握View 第三节 把TT作为View使用

时间:2007-04-18  来源:xiaoshengcaicai

要把TT作为View在Catalyst里面使用,只需要:
1. 建立一个X::View::MyView, 使之继承自Catalyst::View::TT.
2. 配置这个View.

现在继续拿出我们前面几章里面的示例项目: X, 键入命令:
perl script/x_create.pl View MyView TT
这条命令执行完, 会在lib/X/View/下面创建X::View::MyView.pm.

接下来我们进行配置.
假设我们现在要给这个View配置模板的默认扩展名为.tt.

对于Catalyst的组件, 配置主要有3种方法,

第一种是直接在组件内部配置, 也就是在Catalyst::View::MyView.pm里面写:
__PACKAGE__->config(TEMPLATE_EXTENSION => '.tt');

第二种是在应用程序类内配置, 也就是在MyApp.pm里面, 在setup这行代码前写:
__PACKAGE__->conifg( 'View::MyView' => { TEMPLATE_EXTENSION => '.tt', } );

第三种是在x.yml里面配置,前提是项目使用了ConfigLoader这个插件. 在x.yml里面写:
View::MyView:
  TEMPLATE_EXTENSION: .tt

第3种方法是比较推荐的做法,  整个项目的组件跟插件的配置,或者是其他的配置, 都可以写到x.yml里面.

关于这个View更详细的配置,请参看CPAN文档. 现在我们整个x.yml里面内容如下:

---
name: X

View::MyView:
  INCLUDE_PATH:
    - __HOME__/root/tt
  TEMPLATE_EXTENSION: .tt


__HOME__是ConfigLoader支持的一个变量,它实际上指整个项目的home目录
这几行配置使到View::MyView在找模板的时候会去__HOME__/root/tt目录下找, 当我们没有指定模板名时,这个View会根据当前匹配的action名以及配置的扩展名.tt去找模板.

下面我们在root/tt/下面建立一个test.tt,内容如下:

hello, this is only a test  <br>

 [% var1 %] <br>
 [% var2 %] <br>

 our project name is :[% c.config.name %]



在Root.pm里面修改action代码如下:

sub default : Private {
    my ( $self, $c ) = @_;
    $c->response->body( $c->welcome_message );
}

sub t :Local {
    my ( $self, $c ) = @_;
    $c->stash->{template} = 'test.tt';
}

sub end : Private  {
     my ( $self, $c ) = @_;   
    $c->forward('View::MyView') unless $c->res->body;
}

启动我们的x_server.pl,访问http://xxxx/t

你会看到页面:

hello, this is only a test
this is var1
this is var2
our project name is :X

当你访问http://xxxx/t时, t这个action匹配这个URL.
我们准备在这个action里面使用一个叫test.tt的模板, 所以我们先把模板名字存到stash里面, 待会View::MyView会把从stash里面得到这个模板名字,然后去磁盘读取这个模板.
我们还往stash里面放了一些变量: var1,var2,这些stash里面的变量, 待会View::MyView都会从stash里面把它们读出来,然后全部替换到模板里面.
在end这个action里面, 程序forward到View::MyView这个组件, 该组件的process方法会从stash读出template的名字, 然后从磁盘加载模板, 再把stash里面的变量都替换到模板里面, 最后把输出保存到$c->res->body里面.

然后你会发现,我们并没有往$c->stash里面放入一个名为c的变量,为什么模板里面却有这样的语句呢: [% c.config.name %], 那是因为, View::MyView会自动的把$c这个变量放到模板里面去替换变量c.所以我们可以在action里面省略这样的代码: $c->stash->{c} = $c;
相关阅读 更多 +
排行榜 更多 +
方块枪战战场安卓版

方块枪战战场安卓版

飞行射击 下载
战斗火力射击安卓版

战斗火力射击安卓版

飞行射击 下载
空中防御战安卓版

空中防御战安卓版

飞行射击 下载