如何将路由器列表拆分为模块?

时间:2014-07-17 01:35:03

标签: nette

我有这个路由器列表:

$router[] = $adminRouter = new RouteList('Admin');
$adminRouter[] = new Route('admin/<presenter>/<action>', 'Dashboard:default');

$router[] = $frontRouter = new RouteList('Front');
$frontRouter[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');

但最好将这两个路由器列表分成模块文件夹。将来我可能会创建更多具有不同路由器列表的模块。如何分离它以及如何注册它?

1 个答案:

答案 0 :(得分:3)

使用RouteFactory

在config.neon中

services:
  routeFactory.Front: FrontModule\RouteFactory
  routeFactory.Admin: AdminModule\RouteFactory
  route:
    class: \RouteFactory
    setup: 
      - addRouteFactory(@routeFactory.Front)
      - addRouteFactory(@routeFactory.Admin)

类RouteFactory:

class RouteFactory
{
  /** @var array */
  private $routerFactories = array();


  public function addRouteFactory(IRouteFactory $routeFactory)
  {
    $this->routeFactories[] = $routeFactory;
  }

  public function createRouter()
  {
    $router = new RouteList();
    foreach ($this->routeFactories as $routeFactory) {
      $router[] = $routeFactory->createRouter();
    }

    return $router;
  }
}

界面IRouteFactory:

interface IRouteFactory
{
  public function createRouter();
}

模块路由工厂

namespace FrontModule;

class RouteFactory implements \IRouteFactory
{
  public function createRouter()
  {
    $router = new RouteList('Front');
    // your routes

   return $router;
  }
}