【问题标题】:Phalcon unable to find classPhalcon 找不到类
【发布时间】:2014-07-28 18:10:29
【问题描述】:

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

我的目录结构是这样的

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

而我的基本控制器正试图这样调用

$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

感谢大家的帮助

【问题讨论】:

    标签: php namespaces phalcon phalcon-routing


    【解决方案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 命名空间中。

    【讨论】:

      【解决方案2】:

      很难找到提示我的讨论,但我的理解是,当使用命名空间时,你会使用命名空间。使用目录和其他规则时,不要使用命名空间。

      命名空间更快,所以最好还是坚持使用它们,删除 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

      【讨论】:

        【解决方案3】:
        $loader->registerNamespaces(array(
            'App'        => __DIR__ . "/../library/",
        ), true);
        

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

        图书馆 - 测试 - 名称.php

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-05-29
          • 1970-01-01
          • 2015-09-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-04-25
          • 2013-11-02
          相关资源
          最近更新 更多