Использование RouteCollectionProvider в Silex

У меня есть обычай Silex\RouteCollection который я хочу зарегистрировать …

class RouteCollectionProvider extends RouteCollection
{
public function __construct() {
$this->add(
'Index',
new Route('/', array(
'method' => 'get',
'controller' => 'index',
'action' => 'index'
)
));
}
}

…во время начальной загрузки:

$app = new Silex\Application();
/**  here  **/
$app->run();

Я мог бы использовать:

$app = new Silex\Application();
$routes = new RouteCollectionProvider();
foreach ($routes->getIterator() as $route) {
$defaults = $route->getDefaults();
$pattern  = $route->getPath();
$callback = 'Controller\\'
. ucfirst($defaults['controller'])
. 'Controller::'
. $defaults['action']
. 'Action';
$app->get($pattern, $callback);
}
$app->run();

Мне не нравится инициализация этих маршрутов прямо там.
Знаете ли вы какое-нибудь место в Silex, где это подходит лучше?

Я не могу использовать $app->register() потому что он вызывается слишком поздно, и маршруты не получат активный там.

Может быть, есть событие, которое я могу использовать с

$app->on('beforeCompileRoutesOrSomething', function() use ($app) {
// initialize routes
}

Или крючок в Диспетчере?

Моя цель — не иметь большую коллекцию $app->get() или же $app->post() там. Я также знаю, что могу ->mount() controller но тогда еще у меня есть все мои get определения в моей начальной загрузке, а не в провайдере.

1

Решение

Этот пост решает проблему: Масштабирование Silex pt. 2.

$app = new Application;

$app->extend('routes', function (RouteCollection $routes, Application $app) {
$routes->addCollection(new MyCustomRouteCollection);
return $routes;
});

$app->run();
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]