Phalcon加载助手文件库

时间:2014-03-15 10:04:47

标签: php phalcon

我已经创建了一个库,它将加载一个php文件(可能包含用户自定义函数...),你也可以从控制器调用它来自bootstrap。如果文件不存在,它将显示错误消息。我是以现在的方式做的吗?

如果我确实错过任何指出我的事情......谢谢

Helpers是用户可以放置php文件的文件夹

app/
   controllers/
   models/
   helpers/
   library/
   views/

" library /"将名为" helperfile.php"

的php文件归档
class helperfile extends Phalcon\Mvc\User\Component
{
    var $helper_Folder = '../app/helpers';
    var $files = array();

    public function __construct()
    {
    }

    public function initialize()
    {
    }

    public function include_file($files, $run = true)
    {
        if (!is_array($files))
            $files = array($files);
        foreach ($files as $file)
            $this->files[$file] = $file;
        if ($run)
            $this->load();
    }

    public function beforeDispatch()
    {
        $this->load();
    }

    private function load()
    {
        if (empty($this->files))
            return false;
        foreach ($this->files as $file) {
            $file = trim($file) . '.php';
            if ($this->is_file_exists($file)) {
                require $this->helper_Folder . '/' . $file;
            }
        }
    }

    private function is_file_exists($path)
    {
        $full_path = $this->helper_Folder . '/' . $path;
        if (!file_exists($full_path)) {
            $this->flash->error("Helper File Missing: " . $full_path);
            return false;
        }
        return true;
    }
}

//通过引导程序在每个页面上自动加载文件(" public / index.php")

$di->set('dispatcher', function () {

    //Create/Get an EventManager
    $eventsManager = new Phalcon\Events\Manager();

    /*
     * Load Custom function files which are in the helpers folder
     */
    $loadHelper = new helperfile();
    $loadHelper->include_file([
        'calling_from_bootstrap_1',
        'calling_from_bootstrap_2'
    ],false);

    $eventsManager->attach('dispatch', $loadHelper);

    $dispatcher = new Phalcon\Mvc\Dispatcher();
    $dispatcher->setEventsManager($eventsManager);
    return $dispatcher;
});

//从控制器

加载它
$loadHelper = new helperfile();
$loadHelper->include_file([
    'calling_from_theController'
]);

1 个答案:

答案 0 :(得分:8)

看起来它起作用了,但我认为你低估了Phalcon可以为你做的工作量。

辅助文件中的内容示例很有用。为了这个例子,我将假设它是这样的:

app/
   helpers/
           ProductHelper.php

并在ProductHelper.php中

class ProductHelper{
    // code here
}

在您拥有装​​载程序的引导程序中,您可以定义目录

$phalconLoader = new \Phalcon\Loader();

/**
 * We're a registering a set of directories taken from the configuration file
 */
$phalconLoader->registerDirs(
    array(
        $phalconConfig->application->controllersDir,
        $phalconConfig->application->modelsDir,
        // path to helper dir here
    )
)->register();

然后在你的控制器中

public function productAction(){
    $productHelper = new productHelper();
}

那应该有用。这是更少的代码,所以更简单应该运行更快(使用phalcon的内置代码而不是写一些PHP总是会更快)

如果帮助程序中的代码不在类中,或者名称与文件名不同,那么它可能应该是。使事情变得更加简单。

启用版本

class ProductHelper extends \Phalcon\DI\Injectable{
    public $config;

    public function myFunction(){
        $this->config = $this->getDI ()->get ('config');
    }
}

并在控制器中

public function indexAction()
{
    $helper = new ProductHelper();
    $helper->setDI($this->getDI());
    $helper->myFunction();
}

或者在创建DI时

$di->set ('productHelper', function () use ($config, $di) {
    $helper = new ProductHelper();
    $helper->setDi ($di);

    return $helper;
});

并在控制器中

public function indexAction()
{
    $helper = new ProductHelper();
    $helper->myFunction();
}