首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为Volt编译模板设置顶级缓存目录?

如何为Volt编译模板设置顶级缓存目录?
EN

Stack Overflow用户
提问于 2016-03-23 22:48:04
回答 1查看 703关注 0票数 1

我在Phalcon中配置Volt引擎的方式如下:

代码语言:javascript
复制
// create dependency injector
$di = new Phalcon\DI\FactoryDefault(); 

// configure Volt compiler
$di->set('volt', function($view, $di) {
    $volt = new \Phalcon\Mvc\View\Engine\Volt($view, $di);
    $volt->getCompiler()
            ->addFunction('strtotime', 'strtotime')
            ->addFunction('money_format', 'money_format')
            ->addFunction('slownie', 'Kwota::getInstance()->slownie');
    $volt->setOptions(array(
        'compiledPath' => '../cache/'   // this directory EXISTS
    ));
    return $volt;
});

// configure View for backend actions
$di->set('view', function() {
    $view = new Phalcon\Mvc\View();
    $view->setViewsDir('../app/51/views/');
    $view->registerEngines(['.volt' => 'volt']);
    return $view;
});

// configure View for custom content like E-mails, print-view, etc.
$di->set('simpleView', function() {
    $view = new Phalcon\Mvc\View\Simple();
    $view->setViewsDir('../app/volt/');
    $view->registerEngines(['.volt' => 'volt']);
    return $view;
});

如您所见,编译后的.volt.php模板应该保存在../缓存目录中,但是它们是在.volt模板所在的同一个文件夹中生成的。怎么啦?

顺便说一句,对多个视图实例使用共享(相同) "volt“组件安全吗?注意,Volt构造函数采用$view参数。

编辑:您不能为视图simpleView使用共享Volt编译器,因为它们会产生干扰。

EN

回答 1

Stack Overflow用户

发布于 2016-03-24 03:54:47

看这个样本

1)视图的Config id

代码语言:javascript
复制
$di->set('view', function () use ($config) {

$view = new View();

$view->setViewsDir($config->application->viewsDir);

$view->registerEngines(array(
    '.volt' => function ($view, $di) use ($config) {

            $volt = new VoltEngine($view, $di);

            $volt->setOptions(array(
                'compiledPath' => $config->application->cacheDir,
                'compiledSeparator' => '_'
            ));
            return $volt;
        },
    '.phtml' => 'Phalcon\Mvc\View\Engine\Php'
));
return $view;}, true);

2)对于您使用的函数,应该创建组件

代码语言:javascript
复制
use Phalcon\Mvc\User\Component;
class Somefunctions extends Component {
    public function strtotime($val){
        .
        .
        return $result;
    }
}

3)此组件的Config id

代码语言:javascript
复制
$di->set('somefunctions', function(){
return new Somefunctions();});

4)然后,您可以使用volt中的函数:

代码语言:javascript
复制
{{ somefunctions.strtotime('val') }}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36190182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档