php - Symfony 2 动态路由(例如商店)

标签 php symfony dynamic routing

我是 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/

相关文章:

php - 流体接口(interface)如何返回 $this 和值?

php - 在sql中按数组中的值获取行

haskell - 在 Haskell 中,如何在 Dynamic TypeRef 上做一个 case 语句

javascript - 如何使用 webpack 异步加载图片

javascript - 在 onclick 事件上运行 PHP 代码

php - 在 Lithium session 中存储密码安全吗?

php - CodeIgniter 3 中的命名查询绑定(bind)?

php - 覆盖 FOS 用户包中的 "Change Password"模板

php - 从 Twig 扩展渲染模板

python - 使用 Python 访问不断变化的网页元素