Php 如何在Volt(Phalcon)中设置自己的标记类
我想重新声明并向helper标记添加一些方法Php 如何在Volt(Phalcon)中设置自己的标记类,php,phalcon,volt,Php,Phalcon,Volt,我想重新声明并向helper标记添加一些方法 class MyTags extends \Phalcon\Tag { public static function mytag($params) { <...> } } 但它只适用于PHP引擎,不适用于Volt {{ mytag() }} 返回 Undefined function 'mytag' 首先:不要使用标记作为您的服务名称,因为它已经被Phalcon的标记对象使用。其次,您可以使用类
class MyTags extends \Phalcon\Tag
{
public static function mytag($params)
{
<...>
}
}
但它只适用于PHP引擎,不适用于Volt
{{ mytag() }}
返回
Undefined function 'mytag'
首先:不要使用
标记
作为您的服务名称,因为它已经被Phalcon的标记对象使用。其次,您可以使用类中的静态方法
下面是使用“我的应用程序中的配置”更改名称的myTag
的工作示例
$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' => '_',
'compileAlways' => false
)
);
$compiler = $volt->getCompiler();
// add a function
$compiler->addFunction(
'myTag',
function ($resolvedArgs, $exprArgs) {
return 'MyTags::mytag(' . $resolvedArgs . ')';
}
);
// or filter
$compiler->addFilter(
'myFilter',
function ($resolvedArgs, $exprArgs) {
return 'MyTags::mytag(' . $resolvedArgs . ')';
}
);
return $volt;
}
)
);
return $view;
},
true
);
然后可以在volt视图中使用myTag()
函数
但如果要使用对象,则不要使用静态方法:
class MyTags extends \Phalcon\Tag
{
/**
* Look no static keyword here
*/
public function mytag($params)
{
<...>
}
}
然后以伏特为单位:
{{ mahTag.mytag() }}
$di->set('mahTag', function() {
return new MyTags();
};
{{ mahTag.mytag() }}