【问题标题】:Phalcon multi module routes for other modules其他模块的 Phalcon 多模块路由
【发布时间】:2016-07-29 22:02:34
【问题描述】:

我正在使用 Phalcon php。我必须尝试使用​​multi modules architecture。我有前端和后端。前端应用程序是默认模块。但我不了解其他模块。如果我在后端有 50 个控制器,控制器有 10 个动作,我必须为后端模块定义所有路由?

【问题讨论】:

    标签: php routing phalcon multi-module


    【解决方案1】:

    我正在使用与您相同的场景。无需定义所有可能的路线。这是我的路线,它们适用于我在 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'
           ]);
    

    【讨论】:

      【解决方案2】:

      对于您的后端路由,您不必定义 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);
      

      【讨论】:

      • 感谢您的回答。控制器动作等的这些参数 1、2、3 是什么?我不明白
      • 检查docs.phalconphp.com/en/latest/reference/routing.html - 有关它的更多详细信息......但它有点像路线图 - 你定义哪个部分 - 如何命名它。例如,1 是控制器,将从第一部分“/([a-zA-Z\-]+)/”中获取。有几种方法可以描述您的路线。
      • 查看@BorisDelev 为您提供的链接,它解释了 Phalcon 路由器如何翻译给定的 URL
      • 非常感谢。这太棒了。
      猜你喜欢
      • 1970-01-01
      • 2014-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-09
      • 2012-04-12
      • 1970-01-01
      • 2018-03-14
      相关资源
      最近更新 更多