ÄÜÆ®·Ñ·¯°¡ º¯¼ö¸¦ ´ëÀÔÇØ render() (À»)¸¦ ÄÝ Çϸé, ÁöÁ¤µÈ ºä½ºÅ©¸³Æ®¸¦ Zend_View ÇÏÁö¸¸ Àоîµé¿©,Zend_View ÀνºÅϽºÀÇ ½ºÄÚÇÁ·Î ±×°ÍÀ» ½ÇÇàÇÕ´Ï´Ù.µû¶ó¼, ºä½ºÅ©¸³Æ® Áß(¾È)¿¡¼ $this (À»)¸¦ ÂüÁ¶Çϸé, ½ÇÁ¦·Î´Â Zend_View ÀÇ ÀνºÅϽº¸¦ °¡¸®Å°°Ô µË´Ï´Ù.
ÄÜÆ®·Ñ·¯·ÎºÎÅÍ ºä¿¡ ´ëÀÔµÈ º¯¼ö´Â, ºäÀνºÅº½ºÀÇ ÇÁ·ÓÆÛƼ·Î¼ ÂüÁ¶ÇÒ ¼ö ÀÖ½À´Ï´Ù.¿¹¸¦ µé¸é, ÄÜÆ®·Ñ·¯·Î º¯¼ö 'something' (À»)¸¦ ´ëÀÔÇß´Ù°í Çϸé, ºä½ºÅ©¸³Æ®³»¿¡¼´Â ±×°ÍÀ» $this->something ±×¸®°í ÃëµæÇÒ ¼ö ÀÖ½À´Ï´Ù (À̰Ϳ¡ ÀÇÇØ, ¾î´À °ªÀÌ ÄÜÆ®·Ñ·¯·ÎºÎÅÍ ´ëÀÔµÈ °ÍÀ¸·Î, ¾î´À °ªÀÌ ½ºÅ©¸³Æ® ³»ºÎ¿¡¼ ÀÛ¼ºµÈ °ÍÀΰ¡¸¦ µÚÂÑÀ» ¼ö ÀÖ°Ô µË´Ï´Ù).
Zend_View ÀÇ µµÀÔÀÇ ºÎºÐ¿¡¼ ³ªÅ¸³» º¸ÀÎ ºä½ºÅ©¸³Æ®ÀÇ ¿¹¸¦ »ý°¢ÇØ ³» º¾½Ã´Ù.
<?php if ($this->books): ?>
<!-- Ã¥ÀÇ À϶÷ -->
<table>
<tr>
<th>ÀúÀÚ</th>
<th>ŸÀÌÆ²</th>
</tr>
<?php foreach ($this->books as $key => $val): ?>
<tr>
<td><?php echo $this->escape($val['author']) ?></td>
<td><?php echo $this->escape($val['title']) ?></td>
</tr>
<?php endforeach; ?>
</table>
<?php else: ?>
<p>Ç¥½ÃÇϴ åÀÌ ¾ø½À´Ï´Ù.</p>
<?php endif;
ºä½ºÅ©¸³Æ®·Î ½Ç½ÃÇØ¾ß ÇÒ ÀÏÀÇ ÃÄ °¡Àå Áß¿äÇÏÁö¸¸ Çϳª´Â, Ãâ·ÂÀ» ÀûÀýÈ÷ À̽ºÄÉÀÌÇÁ ÇÏ´Â °ÍÀÔ´Ï´Ù.À̰ÍÀº, Å©·Î½º »çÀÌÆ® ½ºÅ©¸³ÆÃ °ø°ÝÀ» ¸·´Â °ÍÀ» µ½½À´Ï´Ù. ±×°Í ÀÚ½ÅÀÌ À̽ºÄÉÀÌÇÁ¸¦ ½Ç½ÃÇØ ÁÖ´Â ÇÔ¼ö, ¸Þ¼Òµå, ȤÀº ÇïÆÛ¸¦ »ç¿ëÇϰí ÀÖÀ¸¹Ç·Î ¾ÊÀº ÇÑ, º¯¼ö¸¦ Ãâ·ÂÇÒ ¶§ Ç×»ó ±×°ÍÀ» À̽ºÄÉÀÌÇÁ ÇÏÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù.
Zend_View ÀÇ escape() ±×·¸´Ù°í ÇÏ´Â ¸Þ¼Òµå°¡, ÀÌ À̽ºÄÉÀÌÇÁ¸¦ ½Ç½ÃÇÕ´Ï´Ù.
<?php
// ºä½ºÅ©¸³Æ®°¡ ³ª»Û ¿¹
echo $this->variable;
// ºä½ºÅ©¸³Æ®°¡ ÁÁÀº ¿¹
echo $this->escape($this->variable);
µðÆúÆ®¿¡¼´Â,escape() ¸Þ¼Òµå´Â PHP ÀÇ htmlspecialchars() ÇÔ¼ö·Î À̽ºÄÉÀÌÇÁ¸¦ ½Ç½ÃÇÕ´Ï´Ù.±×·¯³ª ȯ°æ¿¡ µû¶ó¼´Â, ´Ù¸¥ ¹æ¹ýÀ¸·Î À̽ºÄÉÀÌÇÁ ÇÏ°í ½Í¾îÁö±âµµ ÇϰÚÁö¿ä. ÄÜÆ®·Ñ·¯·ÎºÎÅÍ setEscape() ¸Þ¼Òµå¸¦ ½ÇÇàÇÏ´Â °ÍÀ¸·Î, À̽ºÄÉÀÌÇÁ¿¡ »ç¿ëÇÏ´Â ÄݹéÀ» Zend_View ¿¡ ÅëÁöÇÒ ¼ö ÀÖ½À´Ï´Ù.
<?php
// Zend_View ÀÇ ÀνºÅϽº¸¦ ÀÛ¼ºÇÕ´Ï´Ù
$view = new Zend_View();
// À̽ºÄÉÀÌÇÁ¿¡ htmlentities (À»)¸¦ »ç¿ëÇϵµ·Ï(µíÀÌ) ÅëÁöÇÕ´Ï´Ù
$view->setEscape('htmlentities');
// ȤÀº, Ŭ·¡½ºÀÇ Á¤Àû ¸Þ¼Òµå¸¦ »ç¿ëÇϵµ·Ï(µíÀÌ) ÅëÁöÇÕ´Ï´Ù
$view->setEscape(array('SomeClass', 'methodName'));
// ȤÀº, ÀνºÅϽº ¸Þ¼Òµå¸¦ ÁöÁ¤ÇÒ ¼öµµ ÀÖ½À´Ï´Ù
$obj = new SomeClass();
$view->setEscape(array($obj, 'methodName'));
// ±×¸®°í, ºä¸¦ ·»´õ¸µ ÇÕ´Ï´Ù
echo $view->render(...);
Äݹé ÇÔ¼ö ȤÀº ¸Þ¼Òµå´Â, À̽ºÄÉÀÌÇÁ ÇÏ´Â °ªÀ» ÃÖÃÊÀÇ ÆÄ¶ó¹ÌÅͷμ ¹Þ½À´Ï´Ù. ±× ÀÌ¿ÜÀÇ ÆÄ¶ó¹ÌÅÍ´Â ¿É¼ÇÀÌ µË´Ï´Ù.
PHP Àڽŵµ °·ÂÇÑ ÅÛÇø´ ½Ã½ºÅÛÀÔ´Ï´Ù¸¸, °³¹ßÀÚÀÇ »ó´ç¼ö´Â, µ¥ÀÚÀ̳ª¿¡ À־ °í±â´É Áö³ª´Ù/³Ê¹« º¹ÀâÇÏ´Ù (ÀÌ)¶ó°í ´À³¢°í ÀÖ¾î ´Ù¸¥ ÅÛÇø´ ¿£ÁøÀ» °®°í ½Í¾îÇÏ´Â °Í °°½À´Ï´Ù. Zend_View ±×·³, ±×·¯ÇÑ ¸ñÀûÀ» À§Çؼ 2Á¾·ùÀÇ ±¸Á¶¸¦ Á¦°øÇÕ´Ï´Ù. ºä½ºÅ©¸³Æ®¸¦ »ç¿ëÇÏ´Â °Í¿¡ ÀÇÇÏ´Â °Í°ú Zend_View_Interface ½ÇÀåÇÏ´Â °Í¿¡ ÀÇÇÏ´Â °ÍÀÔ´Ï´Ù.
ºä½ºÅ©¸³Æ®¸¦ »ç¿ëÇϰí,PHPLIB Çü½ÄÀÇ ÅÛÇø´°ú °°Àº ´Ù¸¥ ÅÛÇø´ ¿ÀºêÁ§Æ®ÀÇ ÀνºÅϽº¸¦ ÀÛ¼ºÇØ, ±×°ÍÀ» Á¶ÀÛÇÒ ¼ö ÀÖ½À´Ï´Ù.ºä½ºÅ©¸³Æ®¸¦ ÀÌ¿Í °°ÀÌ »ç¿ëÇÏ´Â ¹æ¹ýÀº, ÀÌÇÏ¿Í °°ÀÌ µË´Ï´Ù.
<?php
include_once 'template.inc';
$tpl = new Template();
if ($this->books) {
$tpl->setFile(array(
"booklist" => "booklist.tpl",
"eachbook" => "eachbook.tpl",
));
foreach ($this->books as $key => $val) {
$tpl->set_var('author', $this->escape($val['author']);
$tpl->set_var('title', $this->escape($val['title']);
$tpl->parse("books", "eachbook", true);
}
$tpl->pparse("output", "booklist");
} else {
$tpl->setFile("nobooks", "nobooks.tpl")
$tpl->pparse("output", "nobooks");
}
°ü·ÃÇÏ´Â ÅÛÇø´ ÆÄÀÏÀº, ÀÌ¿Í °°ÀÌ µË´Ï´Ù.
<!-- booklist.tpl -->
<table>
<tr>
<th>ÀúÀÚ</th>
<th>ŸÀÌÆ²</th>
</tr>
{books}
</table>
<!-- eachbook.tpl -->
<tr>
<td>{author}</td>
<td>{title}</td>
</tr>
<!-- nobooks.tpl -->
<p>Ç¥½ÃÇϴ åÀÌ ¾ø½À´Ï´Ù.</p>
Zend_View ȣȯÀÇ ÅÛÇø´ ¿£ÁøÀ» »ç¿ëÇÏ´Â ÆíÀÌ °£´ÜÇÏ´Ù°í ÇÏ´Â »ç¶÷µµ ÀÖ°ÚÁö¿ä.
Zend_View_Interface
±×·³,
ȣȯ¼ºÀ» À¯ÁöÇϱâ À§Çؼ ÃÖÀúÇÑ ÇÊ¿äÇÑ ÀÎÅÍÆäÀ̽º¸¦ Á¤ÀÇÇϰí ÀÖ½À´Ï´Ù.
/**
* ÅÛÇø´ ¿£Áø ¿ÀºêÁ§Æ®¸¦ µ¹·ÁÁÝ´Ï´Ù
*/
public function getEngine();
/**
* ºä½ºÅ©¸³Æ®/ÅÛÇø´¿¡ÀÇ ÆÐ½º¸¦ ¼³Á¤ÇÕ´Ï´Ù
*/
public function setScriptPath($path);
/**
* ¸ðµç ºä¸®¼Ò½º¿¡ÀÇ º£À̽º ÆÐ½º¸¦ ¼³Á¤ÇÕ´Ï´Ù
*/
public function setBasePath($path, $prefix = 'Zend_View');
/**
* ºä¸®¼Ò½º¿¡ÀÇ º£À̽º ÆÐ½º¸¦ Ãß°¡ÇÕ´Ï´Ù
*/
public function addBasePath($path, $prefix = 'Zend_View');
/**
* ÇöÀçÀÇ ½ºÅ©¸³Æ®ÀÇ ÆÐ½º¸¦ ÃëµæÇÕ´Ï´Ù
*/
public function getScriptPaths();
/**
* ÅÛÇø´ º¯¼ö¸¦ ¿ÀºêÁ§Æ®ÀÇ ÇÁ·ÓÆÛƼ·Î¼ ´ëÀÔÇϱâ À§ÇÑ overload ¸Þ¼Òµå
*/
public function __set($key, $value);
public function __get($key);
public function __isset($key);
public function __unset($key);
/**
* ÅÛÇø´ º¯¼ö¸¦ ¼öµ¿À¸·Î ´ëÀÔÇϰųª º¹¼öÀÇ º¯¼ö¸¦
* Àϰý ¼³Á¤Çϰųª ÇÕ´Ï´Ù
*/
public function assign($spec, $value = null);
/**
* ´ëÀÔ ³¡³ ÅÛÇø´ º¯¼ö¸¦ »èÁ¦ÇÕ´Ï´Ù
*/
public function clearVars();
/**
* $name ±×·¸´Ù°í ÇÏ´Â ÅÛÇø´À» ·»´õ¸µ ÇÕ´Ï´Ù
*/
public function render($name);
ÀÌ ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇϸé, ½áµåÆÄƼÀÇ ÅÛÇø´ ¿£ÁøÀ» ·¦ ÇØ Zend_View ȣȯÀÇ Å¬·¡½º¸¦ ÀÛ¼ºÇÏ´Â °ÍÀÌ °£´ÜÇÏ°Ô µË´Ï´Ù. ¿¹·Î¼Smarty ¿ë¹«ÀÇ ·¡ÆÛ´Â ÀÌ¿Í °°ÀÌ µË´Ï´Ù.
require_once 'Zend/View/Interface.php';
require_once 'Smarty.class.php';
class Zend_View_Smarty implements Zend_View_Interface
{
/**
* Smarty object
* @var Smarty
*/
protected $_smarty;
/**
* constructor¡¡ ¡¡
*
* @param string $tmplPath
* @param array $extraParams
* @return void
*/
public function __construct($tmplPath = null, $extraParams = array())
{
$this->_smarty = new Smarty;
if (null !== $tmplPath) {
$this->setScriptPath($tmplPath);
}
foreach ($extraParams as $key => $value) {
$this->_smarty->$key = $value;
}
}
/**
* ÅÛÇø´ ¿£Áø ¿ÀºêÁ§Æ®¸¦ µ¹·ÁÁÝ´Ï´Ù
*
* @return Smarty
*/
public function getEngine()
{
return $this->_smarty;
}
/**
* ÅÛÇø´¿¡ÀÇ ÆÐ½º¸¦ ¼³Á¤ÇÕ´Ï´Ù
*
* @param string $path ÆÐ½º·Î ÇØ¼ ¼³Á¤ÇÏ´Â µð·ºÅ丮
* @return void
*/
public function setScriptPath($path)
{
if (is_readable($path)) {
$this->_smarty->template_dir = $path;
return;
}
throw new Exception('¹«È¿ÀÎ ÆÐ½º°¡ ÁöÁ¤µÇ¾ú½À´Ï´Ù');
}
/**
* ÇöÀçÀÇ ÅÛÇø´ µð·ºÅ丮¸¦ ÃëµæÇÕ´Ï´Ù
*
* @return string
*/
public function getScriptPaths()
{
return array($this->_smarty->template_dir);
}
/**
* setScriptPath ¿¡ÀÇ ¾Ù¸®¾î½º(alias)
*
* @param string $path
* @param string $prefix Unused
* @return void
*/
public function setBasePath($path, $prefix = 'Zend_View')
{
return $this->setScriptPath($path);
}
/**
* setScriptPath ¿¡ÀÇ ¾Ù¸®¾î½º(alias)
*
* @param string $path
* @param string $prefix Unused
* @return void
*/
public function addBasePath($path, $prefix = 'Zend_View')
{
return $this->setScriptPath($path);
}
/**
* º¯¼ö¸¦ ÅÛÇø´¿¡ ´ëÀÔÇÕ´Ï´Ù
*
* @param string $key º¯¼ö¸í
* @param mixed $val º¯¼öÀÇ °ª
* @return void
*/
public function __set($key, $val)
{
$this->_smarty->assign($key, $val);
}
/**
* ´ëÀÔµÈ º¯¼ö¸¦ ÃëµæÇÕ´Ï´Ù
*
* @param string $key º¯¼ö¸í
* @return mixed º¯¼öÀÇ °ª
*/
public function __get($key)
{
return $this->_smarty->get_template_vars($key);
}
/**
* empty() (ÀÌ)³ª isset() ÀÇ Å×½ºÆ®°¡ µ¿ÀÛÇϵµ·Ï(µíÀÌ) ÇÕ´Ï´Ù
*
* @param string $key
* @return boolean
*/
public function __isset($key)
{
return (null !== $this->_smarty->get_template_vars($key));
}
/**
* ¿ÀºêÁ§Æ®ÀÇ ÇÁ·ÓÆÛƼ¿¡ ´ëÇØ¼ unset() ÇÏÁö¸¸ µ¿ÀÛÇϵµ·Ï(µíÀÌ) ÇÕ´Ï´Ù
*
* @param string $key
* @return void
*/
public function __unset($key)
{
$this->_smarty->clear_assign($key);
}
/**
* º¯¼ö¸¦ ÅÛÇø´¿¡ ´ëÀÔÇÕ´Ï´Ù
*
* ÁöÁ¤ÇÑ Å°¸¦ ÁöÁ¤ÇÑ °ªÀ¸·Î ¼³Á¤ÇÕ´Ï´Ù.ȤÀº,
* Ű => Ä¡ Çü½ÄÀÇ ¹è¿·Î Àϰý ¼³Á¤ÇÕ´Ï´Ù
*
* @see __set()
* @param string|array $spec »ç¿ëÇÏ´Â ´ëÀÔ ¹æ½Ä (Ű, ȤÀº Ű => Ä¡ ÀÇ ¹è¿)
* @param mixed $value (¿É¼Ç) À̸§À» ÁöÁ¤ÇØ ´ëÀÔÇÏ´Â °æ¿ì´Â, ¿©±â¼ °ªÀ» ÁöÁ¤ÇÕ´Ï´Ù
* @return void
*/
public function assign($spec, $value = null)
{
if (is_array($spec)) {
$this->_smarty->assign($spec);
return;
}
$this->_smarty->assign($spec, $value);
}
/**
* ´ëÀÔ ³¡³ ¸ðµç º¯¼ö¸¦ »èÁ¦ÇÕ´Ï´Ù
*
* Zend_View ¿¡ {@link assign()} (ÀÌ)³ª ÇÁ·ÓÆÛƼ
* ({@link __get()}/{@link __set()}) ±×¸®°í ´ëÀÔµÈ º¯¼ö¸¦ ¸ðµÎ »èÁ¦ÇÕ´Ï´Ù
*
* @return void
*/
public function clearVars()
{
$this->_smarty->clear_all_assign();
}
/**
* ÅÛÇø´À» ó¸®ÇØ, °á°ú¸¦ Ãâ·ÂÇÕ´Ï´Ù
*
* @param string $name ó¸®ÇÏ´Â ÅÛÇø´
* @return string Ãâ·Â °á°ú
*/
public function render($name)
{
return $this->_smarty->fetch($name);
}
}
ÀÌ ¿¹¿¡¼´Â,Zend_View
(Àº)´Â ¾Æ´Ï°í
Zend_View_Smarty
Ŭ·¡½ºÀÇ ÀνºÅϽº¸¦ ÀÛ¼ºÇØ,
±×°ÍÀ» »ç¿ëÇØ Zend_View
(¿Í)°ú °°Àº ÀÏÀ» Çϰí ÀÖ½À´Ï´Ù.
$view = new Zend_View_Smarty();
$view->setScriptPath('/path/to/templates');
$view->book = 'Zend PHP 5 Certification Study Guide';
$view->author = 'Davey Shafik and Ben Ramsey'
$rendered = $view->render('bookinfo.tpl');