Zend Framework 1 的 Zend_View 實踐了 Rasmus Lerdorf (PHP 發明人) 的想法「PHP 本身就是 template language,不應該在 PHP 裡面再發明一套 template language」。
Zend_View 是可以獨立拿出來用的,使用方式很簡單:
$view = new Zend_View();
$view->setBasePath(realpath(__DIR__ . '/../application/view'));
echo $view->render('index/index.phtml');
這樣對應的 template 檔案是 application/view/scripts/index/index.phtml
。
Zend Framework 2 除了改用 namespace 外 (所以名稱從原來的 "_
" 改成 "\
"),還把 Zend\View 深度整合到 Zend\Mvc
裡,這使得要獨立拿出來用的手續就變得... 超... 麻... 煩...
透過 Composer 安裝的人除了在 composer.json
裡面要設定 zendframework/zend-view
外,還要設定 zendframework/zend-filter
才會動 (不知道為什麼沒被放進 dependency),像是這樣:
"require": {
"zendframework/zend-filter": "2.2.*",
"zendframework/zend-view": "2.2.*"
}
另外 ZF 2 的 Zend\View
則是透過 resolver 物件設定要讀哪個目錄,而非之前用 setBasePath
打發:
$resolver = new \Zend\View\Resolver\TemplatePathStack(
array(
'script_paths' => array(
realpath(__DIR__ . '/../webdata/view/')
)
)
);
$renderer = new \Zend\View\Renderer\PhpRenderer();
$renderer->setResolver($resolver);
echo $renderer->render('index/index.phtml');
這樣對應的 template 檔案是 webdata/view/index/index.phtml
,跟 ZF1 相比少了一個 scripts
。
ZF 的文件一如往常的難讀,還是要去翻 source code 才知道要這樣用,所以也跟往常一樣,寫下來避免之後又忘記...