我知道Silex方法的基础是将所有应用程序逻辑都放在一个文件中。但是我的应用程序将可能具有二十多个 Controller 。所以我想有一个方便的 map 来管理路由器。
我的问题是寻找能够将路由器制作成单独文件的解决方案。在最佳情况下,文件必须为YAML类型:
# config/routing.yml
_home:
pattern: /
defaults: { _controller: MyProject\Controller\MyController::index }
但是本地人也是个好例子(对我而言):
$routes = new RouteCollection();
$routes->add(
'home',
new Route('/', array('controller' => 'MyProject\Controller\MyController::index')
));
return $routes;
第二种情况的问题是,我必须为每个路由规则使用 match()函数。这一点还不清楚。
解决此问题的方法是什么?条件是我要使用现有的API Silex或Symfony2的组件。
小提示:
我的Controller类不使用 ControllerProviderInterface 。这是一个独立的类。
最佳答案
首先,Silex的基础并不是将所有内容都放在一个文件中。 Silex的基础是您创建自己的“框架”,即您自己的组织应用程序的方式。
在Silex的创建者this blogpost中阅读有关此内容的更多信息。
如何解决你的问题
您基本上想要的是解析Yaml文件,并从每个解析的路由中获取pattern
和defaults._controller
设置。
要解析Yaml文件,可以使用Symfony2的the Yaml Component。您会得到一个数组,可以用来添加到Silex的路线:
// parse the yaml file
$routes = ...;
$app = new Silex\Application();
foreach ($routes as $route) {
$app->match($route['pattern'], $route['defaults']['_controller']);
}
// ...
$app->run();
关于symfony - Silex的自定义路由配置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14676257/