PhalconPHP - 如果使用 Loader 命名空间则无法加载控制器

PhalconPHP - Cannot load controllers if they are namespaced with Loader

在我命名我的应用程序(测试应用程序)之前,一切正常。 但是在我开始为控制器命名空间以及所有内容并像这样加载命名空间之后:

    $loader = new Loader();
    $loader->registerNamespaces(
        array(
            'Application\Controllers' => 'Application/Controllers/'
        )
    )->register();

我收到错误 Exception: IndexController handler class cannot be loaded

我输入的命名空间是正确的:

namespace Application\Controllers;

use Phalcon\Mvc\Controller;

class IndexController extends Controller {

    public function indexAction() {
        echo "Hello World";
    }
}


(来源:gyazo.com

我设法通过向路由器添加默认名称空间来修复它:

$router = new Router();
$router->setDefaultNamespace('Application\Controllers');

但这可能会给我带来更多问题,因为命名空间加载器似乎不起作用。

怎么了?

我想你只需要设置命名空间的根,然后 Loader 就会做脚手架:

$loader = new Loader();
$loader->registerNamespaces(
    array(
        'Application' => 'Application'
    )
)->register();

您确定应用程序文件夹正确吗?尝试:

$loader = new Loader();
$loader->registerNamespaces(
    array(
        'Application' => '~/Application/'
    )
)->register();

没问题,在Loader和Router中注册命名空间都是必做的步骤。

首先,您只配置了加载程序。所以如果你在某个地方测试:

$controller = new Application\Controllers\IndexController(); 它会起作用。

但是您还没有告诉您的路由器您的所有路由都应该指向 Application\Controllers 命名空间。所以它试图找到确实不存在的\IndexController class。