本部分内容包括:视图,模板,视图帮助类等。
6.0视图介绍
在Zendframework的MVC编程模型中,视图(View)是在控制器的控制和指挥下,用来对程序逻辑进行呈现(Render)的。呈现的结果,就是我们在浏览器里看到的文字、图片、表单等各种网页元素及其字体、颜色、样式等各种效果。
Zend_View Class就是负责视图工作的类,它有效地完成了视图与程序逻辑的分离。它提供了视图帮助、输出过滤和变量转义等功能。
Zend_View还是一个模板系统,我们可以用PHP作为我们的模板语言。当然ZF还可以在View脚本里使用其他第三方的模板系统,比如PHPLib和Smarty等。
使用Zend_View时主要分两步,首先声明一个Zend_View实例,把变量等赋给它,然后使用控制脚本,根据视图脚本呈现出结果。
例如:
控制脚本(在控制器文件的action里,例如IndexController.php中的函数dispdataAction()):
…… Function dispdataAction() { …… $data = 'to view'; //数据变量 Zend_Loader::loadClass('Zend_View'); $view = new Zend_View(); //实例化 $view->books = $data; //赋值 echo $view->render('view.php'); }
<? php echo $this->escape($this->data ?>
6.2视图对象的Options
视图对象的Options选项进一步规定了视图脚本呈现过程中的一些细节。这些选项可以通过在声明视图对象时指定,在构造函数里设置,也可以通过set……()方法来指定。
—basePath基本路径
设置方法:setBasePath(), addBasePath()
例如目录结构:
base/path/ helpers/ filters/ scripts/
6.3视图对象的一些属性存取方法
—getVars() 得到所有赋予的变量
—clearVars()清除所有赋予的变量
—getScriptPath($script) 得到给定脚本的路径
—getScriptPaths()得到所有脚本的路径
—getHelperPath($helper)得到某个指定助手类的路径
—getHelperPaths()得到所有助手的路径
—getFilterPath($filter) 得到某个指定过滤器类的路径
—getFilterPaths()得到所有过滤器的路径
6.4视图的路径:
6.4.1视图脚本的搜寻路径
如果引导文件中$fc->setParam('noViewRenderer', false);
则默认指定视图文件views/scripts/[controller_name]/[action].phtml
在实际的程序代码中,为了获得可定制的灵活性,都在控制器中实际指定了视图文件的路径:
指定路径例句:$view->setScriptPath('…/views');或
$view->addScriptPath('…/views');
这个时候,引导文件必须有$fc->setParam('noViewRenderer', true);语句,即设置noViewRenderer为true。
6.4.2视图脚本的搜寻的优先顺序
$view = new Zend_View();
$view->addtScriptPath('…/views1');
$view->addScriptPath('…/views2');
$view->addScriptPath('…/views3');
Zend的手册是这样说的:“如果没有指定任何搜素路径,则在控制器文件下搜索视图文件。”但是通过实际环境测试,发现这时会报告错误:
“no view script directory set; unable to determine location for view script”
看起来最少需要指定一个搜索路径。
如果指定了多条搜素路径,则最后的搜索路径优先。也就是说,如果所有的搜索路径下有相同的视图文件,则最后路径下的起作用,它覆盖了前边路径下的视图文件。
6.5视图控制脚本及其变量传递
ZF的控制器是实例化和设置Zend_View的地方。在这里,我们给视图赋值并告诉它用指定的视图脚本去呈现它们。
6.5.1给视图对象赋值
示例:
$view->Variable=”……”;的形式
function assign1Action() { $view = new Zend_View(); $view->setScriptPath('views'); $view->strictVars(true); $view->a = "Hay"; $view->b = "Bee"; $view->c = "Sea"; $view->d; echo $view->render('tp_abc.php'); }
function assign2Action() { $view = new Zend_View(); $view->setScriptPath('views'); $view->assign('a', "Hay"); $view->assign('b', "Bee"); $view->assign('c', "Sea"); echo $view->render('tp_abc.php'); }
function assign3Action() { $view = new Zend_View(); $view->setScriptPath('views'); $array = array( 'a' => "Hay", 'b' => "Bee", 'c' => "Sea", ); $view->assign($array); echo $view->render('tp_abc.php'); }
function assign4Action() { $view = new Zend_View(); $view->setScriptPath('views'); $obj = new StdClass; $obj->a = "Hay"; $obj->b = "Bee"; $obj->c = "Sea"; $view->assign((array) $obj); echo $view->render('tp_abc.php'); }
function myhtmlentityAction() { $view = new Zend_View(); $view->setScriptPath('views'); //自定义类,在/models文件夹下的myclass.php文件中定义 $mycls = new myClass(); //调用$mycls类的myHtmlEntity方法 $view->setEscape(array($mycls, 'myHtmlEntity')); $obj = new StdClass; $obj->a = "the words hay bee sea "; $obj->b = "this is bee"; $obj->c = " this is sea"; $view->assign((array) $obj); echo $view->render('tp_abc.php'); }
<?php echo 'a = ' . $this->escape($this->a).'<br>'; echo 'b = ' . $this->escape($this->b).'<br>'; echo 'c = ' . $this->escape($this->c).'<br>'; ?>
<?php class myClass { public function __construct($options = null) { } function myHtmlEntity($val) {//把所有单词首字母变为大写 return ucwords($val); } } ?>
评论
wwwww
星期五, 12/25/2009 - 01:59 — zixinIt never occurred to me that people wouldn't steel shelving have soap elsewhere storage rack, even if you're homeless racking in the US you can have conveyor chain free soap to wash your hands in a public bathroom. Kudos to that guy. Small actions can change the world.