0

大家好,我正在尝试使用命名空间加载位于库文件夹中不同文件夹中的多个库,但我一直找不到

我的目录结构是这样的

app/
   controllers/
   models/       
   library/
   views/

我的 loader.php 是这样的

$loader = new \Phalcon\Loader();

/**
 * We're a registering a set of directories taken from the configuration file
 */

$loader->registerNamespaces(array(
    'Test\Name'        => __DIR__ . "/../library/",
));

$loader->registerDirs(
    array(
        $config->application->controllersDir,       
        $config->application->modelsDir
    )
)->register();

而我的 basecontroller 正试图这样调用

$var = new Test\Name\functions();

顺便说一句,库中的文件函数是这样的

class functions extends Phalcon\Mvc\User\Component
{


    public function __construct()
    {
    }

    public function initialize()
    {
    }

    public function checking(){

        echo 'checks';

    }

}

我不断得到

Fatal error: Class 'Test\Name\functions' not found in C:\wamp\www\app\controllers\ControllerBase.php on line 38

感谢任何帮助,伙计们

4

3 回答 3

1

我认为你的班级应该有:

namespace Test\Name;

class functions extends Phalcon\Mvc\User\Component
{
// ...  rest of it

在上面。

我也会做这个配置:

$loader->registerDirs(
    array(
        $config->application->controllersDir,       
        $config->application->modelsDir,
        __DIR__ . "/../library/",
    )
)->register();

所以你的班级会在(我也会把你的班级重命名为函数:

app/library/Test/Name/Functions.php

所以很明显你的Functions类在Test\Name命名空间中。

于 2014-07-29T06:53:07.367 回答
0

无法找到引导我进入的讨论,但我的理解是,在使用命名空间时,您使用命名空间。使用目录和其他规则时,不要使用命名空间。

命名空间更快,所以最好还是坚持使用它们,放弃它们,registerDirs因为它们是多余的,并且与命名空间的含义相同:

library\Test\Name.php

变成:

$loader->registerNamespaces(array(
    'Apps\Module\Controllers'   => $config->application->controllersDir,
    'Apps\Module\Models'        => $config->application->modelsDir,
    'Test'        => __DIR__ . "/../library/Test",
));

然后作为Test\Name.

于 2014-08-08T00:52:02.060 回答
0
$loader->registerNamespaces(array(
    'App'        => __DIR__ . "/../library/",
), true);

它将合并所有子目录,如果你像这样库目录架构

库 - 测试 - Name.php

您可以调用 new \App\Test\Name();

于 2014-08-28T06:30:15.110 回答