模块布线不正确



我的应用程序路由非常奇怪,这是一个API。我没有使用micro,只是使用常规的Phalcon堆栈。

这是我的路由器定义:

$di->set('router', function () {
    $router = new Router(false);
    $router->setDefaultAction('index');
    $router->setDefaultController('index');
    $router->add('/:module/:controller/:params', array(
        'module' => 1,
        'controller' => 2,
        'params' => 3
    ));
    $router->removeExtraSlashes(true);
    return $router;
});

路由器使用以下示例路径:

  • /v1/用户/
  • /v1/用户/1/
  • /v1/users/1/permissions/

但由于某种原因,以下路线与任何路线都不匹配!

  • /v1/

奇怪的是,我在玩路由定义,当我将add的第一个参数改为"/:module"(而不是"/:module/:controller/:params")时,路由器可以正常工作!

我束手无策,希望有人能帮我。我不知道自己做错了什么。不确定为什么一个路由定义会起作用,而另一个会失败。我是不是错过了什么?

注:

  • 我没有setDefaultModule,因为我希望应用程序在模块丢失时抛出错误。我计划对应用程序进行版本控制,我认为这样可以正确处理丢失的模块。关于如何正确处理这件事,我真的找不到更好的答案了,所以我正在尽我所能
  • 我使用的是完整的Phalcon应用程序,而不是micro,因为我想访问整个框架。只是一个架构决策

除了模块的现有路由外,您还可以添加仅通过模块名称访问的路由:作为

...
$router->add('/:module/:controller',
    array(
        'module' => 1,
        'controller' => 2,
        'action' => 'index',
    )
);
$router->add('/:module',
    array(
        'module' => 1,
        'controller' => 'index',
        'action' => 'index',
    )
);
...

如果您想对模块进行版本化并有一定的顺序,这是一种方法。

$router = new Router(false);
$versionedModules = ['a', 'b', 'c'];
foreach ($versionedModules as $module) {
    $namespace = 'App\'. ucfirst($module) . 'Controllers';
    $moduleRouter = new PhalconMvcRouterGroup([
        'namespace' => $namespace,
        'module' => $module
    ]);
    $moduleRouter->add("/{$module}/:controller/:params/", [
        'controller' => 1,
        'params' => 2
    ]);
}
$router->mount($moduleRouter);

最新更新