Phalcon库类调用另一个函数

时间:2015-04-28 17:19:30

标签: php class phalcon

我正在使用phalcon 2.0.0,我试图用另一个函数调用一个函数但是从同一个类调用如下所示,由于某些原因我得到一个空白页面。当我首先评论第二个函数的调用时,页面正确加载。

<?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

    }

}

然后通过伏特功能扩展器访问f1功能

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

如果有人可以帮助我,我们将非常感激。

谢谢你们

1 个答案:

答案 0 :(得分:1)

您试图在Volt中静态调用TestHelper f1(),您的类不会将该函数公开为静态。

您可以像这样更改代码:

<?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.')';
    }
);