Phalcon多模块路由用于其他模块


Phalcon multi module routes for other modules

我使用的是Phalcon-php。我必须尝试使用多模块架构。我有一个前端和后端。前端应用程序是默认模块。但我对其他模块有些不了解。如果我在后端有50个控制器,控制器有10个操作,我必须为后端模块定义所有路由?

对于后端路由,您不必定义50多个不同的路由来匹配所有控制器/操作组合。您基本上可以使用Phalcon提供的默认路由。

这是一个可能符合您需要的示例。我不确定你的确切项目结构是什么。但从你提供的例子来看,试试这个:

$router = new Phalcon'Mvc'Router();
// set the defaults, so Phalcon knows where to start and where to fall back to
$router->setDefaultModule('frontend');
$router->setDefaultNamespace('Apps'Frontend'Controllers');
$router->setDefaultAction("index");
$router->setDefaultController("index");
$router->removeExtraSlashes(true);
/* ----------------------------------------------------- */
/* ------------------ FRONTEND ROUTES ------------------ */
/* ----------------------------------------------------- */
$router->add('/([a-zA-Z'-]+)/([a-zA-Z'-]+)/:params', [
    'module'     => 'frontend',
    'namespace'  => 'Apps'Frontend'Controllers',
    'controller' => 1,
    'action'     => 2,
    'params'     => 3
]);

/* ----------------------------------------------------- */
/* ------------------ BACKEND ROUTES ------------------- */
/* ----------------------------------------------------- */
// to keep your routes.php file clean,
// you can create a separate router group for your backend routes.
$backend = new Phalcon'Mvc'Router'Group();
$backend->setPrefix('/backend');
// for a backend route with a controller
$backend->add('/([a-zA-Z'-]+)', [
    'module'     => 'backend',
    'namespace'  => 'Apps'Backend'Controllers',
    'controller' => 1,
    'action'     => 'index'
]);
// for a backend route with a controller/action
$backend->add('/([a-zA-Z'-]+)/([a-zA-Z'-]+)', [
    'module'     => 'backend',
    'namespace'  => 'Apps'Backend'Controllers',
    'controller' => 1,
    'action'     => 2
]);
// for a backend route with a controller/action/parameter
$backend->add('/([a-zA-Z'-]+)/([a-zA-Z'-]+)/:params', [
    'module'     => 'backend',
    'namespace'  => 'Apps'Backend'Controllers',
    'controller' => 1,
    'action'     => 2,
    'params'     => 3
]);
// add your backend routes to the main router.
$router->mount($backend);

我使用和您相同的场景。没有必要定义所有可能的路线。以下是我的路线,它们适用于CMS区域中我需要的任何东西:

// Frontend routes
// ....
// CMS Routes
$router->add('/cms', [
         'module' => 'backend', 
         'controller' => 'admin', 
         'action' => 'login'
        ]);
$router->add('/cms/:controller/:action/([0-9]+)/:params', [
         'module' => 'backend',
         'controller' => 1,
         'action' => 2,
         'id' => 3, 
         'params' => 4
        ])->setName('backend-full');
$router->add('/cms/:controller/:action', [
         'module' => 'backend',
         'controller' => 1,
         'action' => 2
        ])->setName('backend-short');
$router->add('/cms/:controller', [
         'module' => 'backend',
         'controller' => 1,
         'action' => 'index'
       ]);