Phalcon无法找到课程

时间:2014-07-28 18:10:30

标签: php namespaces phalcon phalcon-routing

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

我的目录结构是这样的

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();

和btw库中的文件函数是这样的

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

任何帮助都是赞赏的人thnx

3 个答案:

答案 0 :(得分: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();

所以你的课程会在(我也会将你的课程重命名为Functions:

app/library/Test/Name/Functions.php

因此,显而易见的是,Functions类位于Test\Name命名空间中。

答案 1 :(得分: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提供。

答案 2 :(得分:0)

$loader->registerNamespaces(array(
    'App'        => __DIR__ . "/../library/",
), true);

它将合并所有子目录,如果您的建筑图书馆像这样

library - Test - Name.php

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