我是 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: ".*"
重要提示:这是一个“包罗万象”,让您在 Controller 中处理实际的请求路径。您应该为 pattern
路径添加前缀,或者在所有其他包之后加载此包,否则其他路由将不再有效。
根据 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.
}
}
关于php - Symfony 2 动态路由(例如商店),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25115379/