【问题标题】:Phalcon Routing for Admin controllers用于管理控制器的 Phalcon 路由
【发布时间】:2016-04-05 20:57:08
【问题描述】:

我是 Phalcon 编程的新手,我有管理/后端和前端控制器 管理员将在 '/admin/:controller/:action' 提供服务,前端将在 '/:controller/:action' 提供服务

管理控制器(KalkuRitel\Controllers\Admin 命名空间)位于

app/
   controllers/
     admin/

和前端控制器(KalkuRitel\Controllers\Frontend 命名空间)位于

app/
   controllers/
     frontend/

我该如何做到这一点? 以及如何使用自己的布局在管理和前端控制器中提供 404 页面?

【问题讨论】:

    标签: php routing url-routing phalcon phalcon-routing


    【解决方案1】:

    我建议创建模块

    app/
      modules/
        admin/
          ...
        frontend/
          ...
        api/
          ...
    

    注册模块:

    $application->registerModules(array(
        'frontend' => array(
            'className' => 'Application\Frontend\Module',
            'path' => __DIR__ . '/../modules/frontend/Module.php'
        ),
        'admin' => array(
            'className' => 'Application\Admin\Module',
            'path' => __DIR__ . '/../modules/admin/Module.php'
        ),
        'api' => array(
            'className' => 'Application\Api\Module',
            'path' => __DIR__ . '/../modules/api/Module.php'
        )
    ));
    

    正确定义 Module.php 文件,然后将路由设置为接近此:

    use Phalcon\Mvc\Router as Router;
    use Phalcon\CLI\Router as CliRouter;
    
    /**
     * Registering a router
     */
    $di->setShared('router', function () use ($application, $config) {
    
        if($application instanceof Phalcon\CLI\Console) {
            return new CliRouter();
        }
    
        $router = new Router(false);
    
        $router->setDefaultModule("frontend");
        $router->setUriSource(\Phalcon\Mvc\Router::URI_SOURCE_GET_URL);
        $router->removeExtraSlashes(TRUE);
    
        foreach($application->getModules() as $key => $module) {
    
            $prefix = $key == 'frontend' ? '' : ('/' . $key);
    
            $router->add($prefix . '/:params', array(
                'module'     => $key,
                'controller' => 'index',
                'action'     => 'index',
                'params'     => 1
            ))->setName($key);
    
            $router->add($prefix . '/:controller/:params', array(
                'module'     => $key,
                'controller' => 1,
                'action'     => 'index',
                'params'     => 2
            ));
    
            $router->add($prefix . '/:controller/:action/:params', array(
                'module'     => $key,
                'controller' => 1,
                'action'     => 2,
                'params'     => 3
            ));
    
        }
    
    
        return $router;
    });
    

    手册中的更多内容: https://docs.phalconphp.com/pl/latest/reference/routing.htmlhttps://docs.phalconphp.com/pl/latest/reference/applications.html

    【讨论】:

    • 从来没有想过使用 foreach 创建路由 :D 好主意!!
    【解决方案2】:

    实现这一点的最佳方法是创建一个多模块应用程序。

    您可以在此处了解有关多模块应用程序设置的更多信息: https://docs.phalconphp.com/en/latest/reference/applications.html#multi-module

    一旦你有了它的结构,你就可以像这样设置路线:

    /*
    * Dependency Injector
    */
    $di = new \Phalcon\Di\FactoryDefault();
    
    /**
    * Register a router
    */
    $di->setShared('router', function () {
      $router = new \Phalcon\Mvc\Router();
    
      $router->setDefaultModule('frontend');
      $router->setDefaultNamespace('Multiple\Frontend\Controllers');
    
      /*
      * Frontend Routes
      */
      $router->add('/:controller/:action', array(
        'namespace'  => 'Multiple\Frontend\Controllers',
        'module'     => 'frontend',
        'controller' => 1,
        'action'     => 2
      )); 
    
      /*
      * Backend Routes
      */     
      $backendRoutes = new \Phalcon\Mvc\Router\Group(array(
        'namespace' => 'Multiple\Backend\Controllers',
        'module'    => 'backend'
      ));
      $backendRoutes->setPrefix('/admin');
    
      $backendRoutes->add('/:controller/:action', array(
        'controller' => 1,
        'action'     => 3
      ));
    
      $router->mount($backendRoutes);
    
      return $router;
    });
    

    这是一个快速的答案,可能需要根据您的个人情况进行调整,但应该让您对如何实现目标有一个很好的了解。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多