文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>第四章 掌握View 第一节 简介

第四章 掌握View 第一节 简介

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


现在我们应该知道controller的编写方法了, 这一章我们将开始介绍View.

在MVC模式里面, View可以有多个,它指的是数据的外在表现.
假设我们系统里面有3个View:
ViewA: 负责把数据填到HTML里面生成HTML代码
ViewB: 负责把数据写到图片文件中从而生成一张含有数据的图片
ViewC: 负责处理数据从而生成PDF文件.
那么一样的数据, 它经过ViewA表现出来的话它就是一张网页, 它通过ViewB表现出来那么就是一张图片,它通过ViewC表现出来就是一个PDF文件.

一般的Catalyst 项目,  都至少有一个View专门负责网页的HTML代码生成.

假设我们在项目里面添加一个View, 它名字叫MyView,那么它的模块名就是X::View::MyView, 它必须从Catalyst::View这个模块继承, 这样它才是一个有效的Catalyst组件. 这样我们就可以通过$c->view('MyView')来得到X::View::MyView 这个组件.

当我们在action里面编写这样的代码:

$c->forward('View::MyView');

程序就会跳转到X::View::V这个组件的Process方法里面, 所以,我们要定义这个组件的Process方法.

下面我们演示如何创建一个View以及如何在Controller里面使用这个View.

首先先在script文件夹下, 执行:
perl x_create.pl View MyView
这样就会自动创建模块X::View::MyView, 然后在该模块下编写一个process 方法:

sub process {
    my ( $self, $c ) = @_;

    my $data = $c->stash->{data};

    unless ( $c->response->headers->content_type ) {
        $c->res->headers->content_type('text/html; charset=utf-8');
    }

    $c->response->body(qq#<html> <body> <font color ="red">$data</font></body></html>#);

    return 1;
}


这个process方法就是从$c->stash->{data}里面得到一个字符串,然后把这个字符串渲染成红色, 最后把HTML代码写到响应的内容里面,同时设置一下响应的头部.

然后我们在Controller里面这样写:

package X::Controller::A;
use strict;
use warnings;
use base 'Catalyst::Controller';

sub list : Local {
     my ($self, $c,) = @_;
     $c->stash->{data} = 'list';
}

sub list2 : Local {
    my ($self, $c,) = @_;
    $c->stash->{data} = 'list2';
}

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

1;


当用户访问a/list时, list这个action 会往stash里面存放一个字符串'list',接着Catalyst会调用最近的end action,这个action里面forward到了MyView,于是调用了MyView的process函数进行处理,最后页面上看到一个红色的'list'字符串,
同理,如果用户访问a/list2,页面上可以看到一个红色的'list2'字符串.

那么到这里为止,你已经了解了一个最简单的View的工作原理.

在大多数情况下, 我们并不会像例子这样自己从头写一个View, 因为如果你要把数据渲染到HTML代码里面的话,CPAN已经有非常多的模块做这些工作,我们没必要重新发明轮子. 所以我们一般是定义一个View,然后这个View里面use 一个CPAN上的模块, 然后在process里面调用CPAN该模块的方法生成HTML代码即可.
所以, 从这种意义上, 在Catalyst里面,View只是一个接口而已.

CPAN有一套功能强大的模块: Template::Toolkit(简称TT),它可以做把数据渲染到HTML里面的工作, 而且, 已经有人为TT写了一个Catalsyt::View::TT, 我们只需要把这个Catalsyt::View::TT直接拿来用即可, 如果你觉得Catalsyt::View::TT 这个名字不爽, 你可以自己写一个Catalsyt::View::MyTT,只要它是从 Catalsyt::View::TT继承即可,你无需编写其他代码.

下面一节我们将开始介绍TT的使用.
相关阅读 更多 +
排行榜 更多 +
方块枪战战场安卓版

方块枪战战场安卓版

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

战斗火力射击安卓版

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

空中防御战安卓版

飞行射击 下载