管理控制器的Phalcon路由


Phalcon Routing for Admin controllers

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

管理控制器(KalkuRitel''controllers''Admin命名空间)位于下

app/
   controllers/
     admin/

和前端控制器(KalkuRitel''controllers''frontend命名空间)位于下

app/
   controllers/
     frontend/

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

我建议创建模块

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.html和https://docs.phalconphp.com/pl/latest/reference/applications.html

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

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

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

/*
* 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;
});

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