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

标签 php phalcon volt

我想重新声明并向 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/

相关文章:

mysql - 我可以在 PhalconPHP 上为两个表构建模型吗?

javascript - 如何在点击图片时检查登录状态

php - 不使用 PHP 和 Ajax 使用 session 登录另一个页面

php - Phalcon MySQL 更新不工作

php - 无法通过 1and1 托管在 VPS 上安装 phalcon 2.x

phalcon - 随处可访问的宏

php - 如何创建带有参数的 volt URL

html - 在 twig/volt 中包含 .css 文件

php - Xampp 服务器中的所有 php 项目应该放在哪里?

php - 在使用 GET url ID 创建的页面上更新 MySQL 记录