簡體   English   中英

Symfony 2動態路由(例如用於商店)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM