模块路由不对

时间:2015-12-09 04:26:41

标签: php phalcon

我在使用我的应用程序的路由时遇到了一些非常奇怪的事情,这是一个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 /用户/ 1 /权限/

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

  • / V1 /

奇怪的是,我正在玩路线定义,当我改变第一个添加到' /:module' (而不是' /:module /:controller /:params'),路由器按预期工作!

我在我的智慧结束,并希望有人可以帮助我。我不知道我做错了什么。不确定为什么一个路由定义会起作用,而另一个路径定义会失败。我错过了什么吗?

注意:

  • 我没有setDefaultModule,因为我希望应用程序在模块丢失时抛出错误。我计划对应用程序进行版本控制,我想通过这种方式我可以正确处理丢失的模块。我无法找到更好的答案,如何妥善处理,所以我尽我所能。
  • 我正在使用完整的Phalcon应用程序,而不是微型,因为我想访问整个框架。只是一个架构决定。

2 个答案:

答案 0 :(得分:1)

以及模块的现有路径,您还可以添加仅通过模块名称访问的路径:as

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

答案 1 :(得分:0)

如果你想版本模块并有一些订单,这是一种方式。

$router = new Router(false);
$versionedModules = ['a', 'b', 'c'];

foreach ($versionedModules as $module) {
    $namespace = 'App\\'. ucfirst($module) . '\Controllers';
    $moduleRouter = new \Phalcon\Mvc\Router\Group([
        'namespace' => $namespace,
        'module' => $module
    ]);

    $moduleRouter->add("/{$module}/:controller/:params/", [
        'controller' => 1,
        'params' => 2
    ]);
}

$router->mount($moduleRouter);