Phalcon路由器不响应子文件夹和名称空间声明

deb*_*ian 1 php phalcon phalcon-routing

因此,我一直在阅读大量的stackoverflow和phalcon论坛线程。(我开始讨厌这个框架),但是似乎没有任何效果,例如,它不能解释为什么像Laravel这样工作。

我只是想能够使用此应用程序结构进行操作:

在此处输入图片说明

如您所见,我想要的只是在子文件夹中使用命名空间控制器来为我的代码设置更多顺序。

根据所有解释,这是我的loader.php:

<?php

$loader = new \Phalcon\Loader();

/**
 * We're a registering a set of directories taken from the configuration file
 */
$loader->registerDirs(
    array(
        $config->application->controllersDir,
        $config->application->modelsDir,
        $config->application->pluginsDir
    )
)->register();
Run Code Online (Sandbox Code Playgroud)

AFAIK,当通过registerDirs使用时,Phalcon应该遍历所有未找到类的子文件夹。

然后,在基本目录中指向索引控制器的主要路由之后,定义到特定控制器的路由:

<?php

$router = new Phalcon\Mvc\Router(false);

$router->add('/:controller/:action/:params', array(
    'namespace' => 'App\Controllers',
    'controller' => 1,
    'action' => 2,
    'params' => 3,
));

$router->add('/:controller', array(
    'namespace' => 'App\Controllers',
    'controller' => 1
));

$router->add('/soccer/soccer/:controller', array(
    'namespace' => 'App\Controllers\Soccer',
    'controller' => 1
));

$router->add('/soccer/:controller/:action/:params', array(
    'namespace' => 'App\Controllers\Soccer',
    'controller' => 1,
    'action' => 2,
    'params' => 3
));

return $router;
Run Code Online (Sandbox Code Playgroud)

我的一个控制器看起来像:

<?php  namespace App\Controllers\Soccer;

use App\Controllers\ControllerBase as ControllerBase;

class IndexController extends ControllerBase
{

    public function indexAction()
    {

    }

}
Run Code Online (Sandbox Code Playgroud)

怎么了 默认顶级名称空间未注册?我想念什么吗?

这就是行不通的。当我尝试打开myserver.com/soccer时,我希望访问app / controllers / soccer / IndexController.php,但它告诉我:

无法加载SoccerController处理程序类

这基本上意味着它正在/ controllers目录中寻找SoccerController.php,而完全忽略了我的子文件夹定义和路由。

菲尔康1.3.0

坚持了一个星期。任何帮助-非常感谢。

Ave*_*kaj 5

我在使用命名空间将ControllerBase和其余控制器加载到controllers文件夹中时遇到问题。我很难过,因为其他示例项目都能正常工作,我意识到我在应该设置setDefaultNamespace的despatcher声明中丢失了一个小细节。

(参考:https : //github.com/phalcon/vokuro/blob/master/app/config/services.php

$di->set('dispatcher', function () {

    $dispatcher = new Dispatcher();

    $dispatcher->setDefaultNamespace('App\Controllers');

    return $dispatcher;
});
Run Code Online (Sandbox Code Playgroud)

或者您可以像这样直接在路由声明文件中指定它

$router->add("/some-controler", array(
    'namespace' => 'App\Controllers'
    'controller' => 'some',
    'action' => 'index'
));
Run Code Online (Sandbox Code Playgroud)

它应该也可以正常工作,起初可能与命名空间有些混淆,但是一旦掌握了命名空间,便会喜欢上这个非常快速的框架