【问题标题】:Symfony 1.0 - Extend sfRoutingSymfony 1.0 - 扩展 sfRouting
【发布时间】:2013-03-11 20:28:58
【问题描述】:

有人知道在 SF1.0 中是否可以使用 routing.yml 中的以下“类”条目?我尝试添加它并覆盖一些方法,例如 getInstance()getCurrentRouteName(),但它们从未被调用,即使我手动调用它们。

checkout_landing:
  class: CustomRoute # Can I do this in SF1.0?
  url: /checkout/landing/:k/*
  param: { module: sharedCheckout, action: landing }

我们已经在 SF1.2 中实现了这个“per-route”自定义类配置,但它似乎不适用于 SF1.0。我怀疑对于 SF1.0,我必须在 factory.yml 文件中添加一个自定义类条目,这将影响所有路由。

额外问题:任何人都可以在 SF1.0 中模拟“extra_parameters_as_query_string”吗?现在,使用上面的 url 条目,GET 参数被转换为伪子目录,例如一个查询字符串,如:

$params = array('foo' => 'bar', 'pet' => 'dog');

$url = sprintf('@checkout_landing?%s', http_build_query($params));

// Looks like:

http://example.com/checkout/landing/foo/bar/cat/dog

// I need it to look like

http://example.com/checkout/landing?foo=bar&pet=dog

【问题讨论】:

    标签: php routing symfony1


    【解决方案1】:

    正如您所怀疑的,如果不做出您建议的 sfRouting 自定义扩展(在 factories.yml 中)的妥协,或者为 @987654323 添加 sf1.2+ 的功能,那么这些事情在 sf1.0 中都是不可能的@。

    我建议您最简单的选择是升级到 sf1.3 的最新稳定版本 (sf1.3.11) 并使用捆绑的 sf10CompatPlugin 来帮助您模拟您在现有应用程序中使用的 sf1.0 功能,同时添加您希望从 sf1.3 核心获得的 sf1.2+ 功能。

    这样做几乎没有兼容性错误,我自己在几十个项目中使用它,没有任何问题。

    【讨论】:

    • 对于我的个人项目,我使用 SF1.4 完全避免了这个问题,但对于工作我们无法从 SF1.0 升级。只是想看看是否有人有解决办法。
    【解决方案2】:

    我浏览了路由的编译缓存代码,果然在 SF1.0 中没有基于 yaml 文件中的“类”条目的自定义对象引用。但是,当我查看 SF1.4 中生成的路由的已编译缓存代码时,自定义对象可用。

    由于升级不是一个选项,我选择手动生成老式的网址。

    【讨论】:

    • 顺便说一句,您能否详细说明为什么不能选择升级? AFAIK 您需要做的就是更改 lib/symfony 的内容 - 即使您无法安装 PEAR,您也可以随时更改 sf_lib_dir 参数以忽略它。不是想拖钓,真的很好奇。
    • 我帮助支持一个庞大的代码库,该代码库一直处于高流量负载下。将功能从 SF1.0 移植到 SF1.4 将是一个大型项目,例如将表单移动到表单类等。商务方面无法证明开发时间和风险破坏的成本是合理的。我们会尽可能移植,但我们可能会在至少 18-24 个月内支持 1.0 api :(
    • 那就是问题所在,您没有正确阅读我的答案-不要升级到1.4,升级到1.3-使用sfCompatPlugin可以保证向后兼容,然后您可以扩展到sf1.2+代码领域不用太担心。 sf1.3 本质上是 sf1.0,有一些附加功能。
    猜你喜欢
    • 2021-03-22
    • 1970-01-01
    • 2015-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    相关资源
    最近更新 更多