2012-01-09 133 views
2

我目前有一个CMS,可以在数据库表中写入一些页面。为了使用Zend_View呈现它们,我有一个将它们写入文件系统的方法。我想跳过该过程并直接从数据库中呈现模板。如何从字符串而不是文件渲染Zend_View脚本

例如:

<?php 
$template = '<html> 
<head> 
<title>Test</title> 
</head> 
<body> 
<?php echo $this->test ?> 
</body> 
</html>'; 

$view = new Zend_View(); 
$view->test = 'This is a test'; 
echo $view->render($template); 
?> 
+1

没有按预期工作? – emaillenin 2012-01-09 16:37:09

+0

不,这在默认情况下不起作用。 Zend_View_Abstract :: render必须传递一个文件名。带有消息“script”的Zend_View_Exception ...“路径中找不到...”将被抛出。 – atodd 2012-01-09 18:09:58

回答

4

Zend_View延伸Zend_View_Abstract和声明了一个具体实现_run()方法(其由render()调用)。原文:

protected function _run() 
{ 
    include func_get_arg(0); 
} 

我猜你想要的东西基本上是:

class Zend_View_String extends Zend_View // or maybe // extends Zend_View_Abstract 
{ 
    protected function _run() 
    { 
     $php = func_get_arg(0); 

     eval(' ?>'. $php. '<?php '); 
    } 
} 

但可能是不是将其写入到一个文件并调用include慢。您可以将文件倾销代码放入您自己的_run方法中。这样做只是给读者一个练习。