Phalcon 库 class 在另一个库中调用一个函数

Phalcon library class calling a function within another

我使用的是 phalcon 2.0.0,我正尝试在另一个函数中调用一个函数,但来自同一个 class,如下所示,出于某种原因,我得到一个空白页。当我从第一个开始评论第二个函数的调用时,页面正确加载。

<?php

use Phalcon\Mvc\User\Component;

class Testhelper extends Component {

    public function f1($data) {
        $tmp = $this->f2($data);
        return $tmp;
    }

    public function f2($data) {
       return '5'; // just testing

    }

}

顺便说一句,我像这样通过 volt 函数扩展程序访问 f1 函数

$compiler->addFunction('customfunc', function($resolvedArgs, $exprArgs) {
                return 'Testhelper ::f1('.$resolvedArgs.')';
});

如果有人能帮助我,我将不胜感激。

谢谢大家

您正在尝试在 Volt 中静态调用 TestHelper f1(),而您的 class 并未将该函数公开为静态。

您可以这样更改代码:

<?php

use Phalcon\Mvc\User\Component;

class Testhelper extends Component 
{

    public static function f1($data) 
    {
        $tmp = self::f2($data);
        return $tmp;
    }

    public static function f2($data) 
    {
        return '5'; // just testing
    }
}

您的 Volt 功能将起作用。但是你必须记住,因为你是静态调用的,所以你不会立即访问 Component 提供的所有 di 容器服务,如下所示:

$this->session
$this->db

您将需要修改代码以使用 getDefault()

选择 di 容器

另一种选择是使用您现在拥有的代码,但像这样在您的 di 容器中注册 TestHelper

$di->set(
    'test_helper',
    function () {
        return new TestHelper();
    }
);

然后您的电压函数需要更改为:

$compiler->addFunction(
    'customfunc', 
    function ($resolvedArgs, $exprArgs) {
        return '$this->test_helper->f1('.$resolvedArgs.')';
    }
);