Phalconn分派器和加载器registerNamespaces

时间:2018-11-29 06:38:56

标签: phalcon loader dispatcher

我正在学习Phalcon(php)。 这是github中使用phalcon并具有以下文件夹结构的示例
单个命名空间/
├──应用
│├──控制器
││├──IndexController.php
││└──ProductsController.php
│├──型号
││└──Products.php
│└──风景
│└──产品
│└──index.phtml
└──公众
   └──index.php

在public / index.php中,$ loader注册了名称空间

$loader->registerNamespaces(
        [
            'Single\Controllers' => '../apps/controllers/',
            'Single\Models'      => '../apps/models/'
        ]
    );

$ dispatcher还设置了命名空间

$di->set('dispatcher', function () {
        $dispatcher = new Dispatcher();
        $dispatcher->setDefaultNamespace('Single\Controllers\\');

        return $dispatcher;
    });

如果我删除了$dispatcher->setDefaultNamespace('Single\Controllers\\'),则错误消息指出 IndexController处理程序类无法加载

这是否意味着在名称空间中加载类时,Dispatcher / Router将忽略加载程序的设置?我们必须明确声明Dispatcher / Router的名称空间吗?

1 个答案:

答案 0 :(得分:0)

也许您误解了Loader的目的和namespaces的用法。

在将值传递给$loader->registerNamespaces(...)时,您告诉框架在哪里寻找您的类,在我们的例子中,通过调用Single\Controllers\IndexController加载程序会尝试包含../apps/controllers/IndexController.php