[英]Symfony 2 dynamic routing (e.g. for stores)
我是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: ".*"
重要提示:這是一個“全能”,讓您可以處理控制器中的實際請求路徑。 您應該為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.
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.