我通过扩展Phalcon\Mvc\View\Engine\Volt
在render($template_path, $params, $must_clean = null)
我设置替代路径的方法中,检查文件是否可用,如果是,我切换 $template_path 给定的替代路径。那么这只是一个调用的情况:
return parent::render($template_path, $params, $must_clean);
其中 $template_path 包含新的(替代)路径。
如果您的替代路径可能会在每个项目的基础上发生变化,并且您需要在引导程序中设置它,那么在从 di 获取“视图”时不要这样做,而是在获取电压时这样做。
请记住,所有视图都是使用该方法呈现的,因此您还必须考虑布局和部分视图 - 取决于您的实现。
示例:(这尚未经过测试,它基于我在自己的代码中的类似设置)
<?php
class Volt extends Phalcon\Mvc\View\Engine\Volt
{
private $skin_path;
public function render($template_path, $params, $must_clean = null)
{
$skin_template = str_replace(
$this->di->getView()->getViewsDir(),
$this->getSkinPath(),
$template_path
);
if (is_readable($skin_template)) {
$template_path = $skin_template;
}
return parent::render($template_path, $params, $must_clean);
}
public function setSkinPath($data)
{
$this->skin_path = $data;
}
public function getSkinPath()
{
return $this->skin_path;
}
}
在您的引导程序中:
$di->setShared('volt', function($view, $di) {
$volt = new Volt($view, $di);
$volt->setSkinPath('my/alternative/dir/');
return $volt;
});
非常感谢 nickolasgregory@github,他为我指明了正确的方向。