Zendframework这样的框架和Smarty这样的模板引擎有什么区别?
作为初学者,我应该从哪个开始?
Zendframework这样的框架和Smarty这样的模板引擎有什么区别?
作为初学者,我应该从哪个开始?
模板引擎的存在是为了让网页设计师的工作更轻松。框架则是为程序员而生。
框架可以包含一个或多个模板引擎。由于框架是为程序员而设计的,因此新的或程序员自己的模板引擎可以嵌入到框架中。
作为一个不需要与设计师合作的程序员,在PHP中你并不真正需要一个模板引擎,因为PHP本身就可以被(X)HTML代码包围。
作为证明PHP本身可以用作模板引擎的事实,这里展示了如何将业务逻辑与视图逻辑分离。
这是一个自制的虚拟模板引擎。它并不完整,也不安全。它只是一个原型,用来展示模板的基本思想。
您可能已经听说过MVC - 或者没有 - 这并不重要。下面描述的实践类似于它,但您不必编写OOP或使用framework。$export = compact('title','name','showdata','errors');
$do_greet变量将不再存在于您的模板中。相反,相同的变量将在业务逻辑脚本中使用相同的名称$showdata。
greet.php
<?php
$title = 'Contact';
$name = 'Guest';
$showdata = FALSE;
$errors = array();
if(isset($_POST['submit'])) {
if(isset($_POST['name']) && $name = trim($_POST['name'])) {
$name = strip_tags($name);
$showdata = TRUE;
}
else {
$errors[] = 'Missing name.';
}
}
$export = array(
'title' => $title,
'name' => $name,
'do_greet' => $showdata,
'errors' => $errors
);
render('greet_view.php',$export);
function render($template,$data) {
extract($data);
return include $template;
}
$export = array(
'title' => $title,
'name' => $name,
'do_greet' => $showdata,
'errors' => $errors,
'referer' => htmlentities($_SERVER['HTTP_REFERER'])
);
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><?php echo $title ?></title>
</head>
<body>
<?php
if($do_greet) {
echo 'Hi ',$name;
}
if(count($errors)) {
if(count($errors)>1) {
echo '<p class="error">',implode('</p><p class="error">',$errors),'</p>';
}
else {
echo '<p class="error">'.$errors[0].'</p>';
}
}
?>
<form method="post">
<input name="name" />
<input type="submit" name="submit" />
</form>
</body>
</html>
免责声明:所呈现的代码不够规范,也不安全或完美。我的意图只是为了让你走上正确的道路。做更多的研究是你的工作。
以上是模板引擎的部分。框架提供功能(以函数和/或类的形式)来解决常见问题,例如身份验证、授权、将请求路由到正确的文件/类(MVC世界中的控制器)等。
与CMS不同的是,这些功能不能直接使用。框架的不同组件必须由程序员进行连接。因为程序员只需要进行这种连接,而不是为每个项目一遍又一遍地(重新)编写这些功能,所以框架使编程更加愉快,让程序员集中精力解决实际的项目特定问题。
像上面介绍的模板引擎可能是该框架的一部分,而render()函数可以是控制器(按照MVC术语)的一个方法。
框架比模板引擎更为复杂。框架可以包含模板引擎,但反之则不行。框架可以帮助您以无数种方式构建您的(Web)应用程序。模板引擎仅用于将变量解析到您预先格式化的HTML模板中。
像Zend Framework这样的框架本质上是在PHP之上的扩展,而Smarty是一个模板引擎,它只是将所有的PHP变量与前端(HTML)分离开来,同时支持简单的内容缓存方法。
我建议你开始学习Smarty,因为它很简单,你会惊讶于将前端设计与PHP代码结合起来会更加容易。
你也可以将Smarty与eAccelerator http://eaccelerator.net/ 结合使用,以加快速度。
简而言之:
模板引擎 实际上只是稍微高级一点的 str_replace。它在模板中搜索特殊标记,并将其替换为相应的值。更高级的引擎(如Smarty)还具有循环和条件。
Web 框架(如Zend)完成网页的大部分核心工作,接受页面请求并将其转发给负责处理请求的处理程序,通常还会将响应信息转发给模板引擎以实现逻辑和布局的分离。 Web框架(还有其他类型的框架,例如GUI框架、网络框架、图形框架等)通常具有实用程序助手,可帮助您处理 typcial web site 需要的所有内容,例如表单验证、会话管理、验证码生成、URL重写等。