gpt4 book ai didi

php - 如何在 Volt (Phalcon) 中设置自己的 Tag 类

转载 作者:行者123 更新时间:2023-12-03 23:04:46 25 4
gpt4 key购买 nike

我想重新声明并向 helper 标签添加一些方法。

class MyTags extends \Phalcon\Tag
{
public static function mytag($params)
{
<...>
}
}

在 services.php 中

$di->set('tag', function() {
return new MyTags();
};

但它只适用于 PHP 引擎,不适用于 Volt。

{{ mytag() }}

返回

Undefined function 'mytag'

最佳答案

首先:不要使用 tag 作为您的服务名称,因为它已被 Phalcon 的 Tag 对象使用。其次,您可以使用类中的静态方法。

下面是 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
);

然后您可以在伏特 View 中使用您的 myTag() 函数。

但是如果你想使用对象那么就不要使用静态方法:

class MyTags extends \Phalcon\Tag
{
/**
* Look no static keyword here
*/
public function mytag($params)
{
<...>
}
}

在服务中使用对象:

$di->set('mahTag', function() {
return new MyTags();
};

然后以伏特为单位:

{{ mahTag.mytag() }}

关于php - 如何在 Volt (Phalcon) 中设置自己的 Tag 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18115579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com