我是Symfony 2的新手,现在我正在尝试获得动态路由,我的意思是真正的动态.
例如:
example.com/en/categoryLevel1/categoryLevel2/categoryLevel3/productId-ProductName
要么
example.com/en/categoryLevel1/categoryLevel2/productId-ProductName
要么
example.com/en/categoryLevel1/categoryLevel2/categoryLevel3/
类别级别的数量(类别深度)必须灵活到100%.必须有可能并且能够使用一个级别到二十个级别.
设置入口的入口在哪里(哪些类在做那些路由工作)?
另一个示例是:
旧页面上的路线:
example.com/{categoryLvl1}/{categoryLvl2}/…/p-{productId}
在新页面上,对路线进行了一些更改:
example.com/{lang}/{catLevel1}/{catLevel2}/…/{productId}-{productName}
我如何做正则表达式等.我知道.但是我在symfony中找不到路由过程(更好的是预路由过程).我想建立一个预路由类并回退“普通” symfony2路由.我必须匹配旧的和新的,两者都是完全动态的..旧的用ZF1编写(对我来说很容易),但是symfony2对我来说是一个新领域…
解决方法:
假设您有一个处理此类URL的包,则可以在包的routing.yml中添加以下内容(我更喜欢yml,YMMV).
YourSomethingBundle_main_any:
pattern: /{request}
defaults: { _controller: YourSomethingBundle:Main:dispatcher }
requirements:
request: ".*"
重要:这是一个“包罗万象”的功能,可让您在控制器中处理实际的请求路径.您应该在模式路径之前添加前缀,或者在所有其他捆绑包之后加载该捆绑包,否则其他路由将不再起作用.
根据SF2约定,您现在将拥有一个带有dispatcherAction方法的MainController类:
<?php
namespace Your\SomethingBundle\Controller;
use \Symfony\Bundle\FrameworkBundle\Controller\Controller;
class MainController extends Controller
{
public function dispatcherAction($request='')
{
$request = preg_split('|/+|', trim($request, '/'));
// ... and so on.
}
}