【问题标题】:Symfony 1.4 create route for pdf filesSymfony 1.4 为 pdf 文件创建路由
【发布时间】:2017-04-29 16:47:57
【问题描述】:

我想为以下网址创建路由。

一切都以pdf 开始,以.pdf 结束

site.com/en/pdf/aaa/bbb/file.pdf
site.com/pdf/aaa/bbb/file.pdf
site.com/pdf/file.pdf
...

我的代码是:

global_pdf:
  class: myRequestRoute
  url: /:sf_culture/pdf/*/*.pdf
  param: { module: pdf, action: showEmbed }
  requirements: { sf_method: get }

但它不起作用。

这是怎么做到的?

谢谢。

【问题讨论】:

  • myRequestRoute 是做什么的?

标签: php routing symfony1


【解决方案1】:

您的路由需要涵盖四种不同的场景:

  1. 路由必须完全匹配格式:site.com/pdf/file.pdf
  2. 路由必须与pdf前的语言匹配:site.com/en/pdf/file.pdf
  3. 路由必须与 pdf 之后的任何内容匹配:site.com/pdf/aaa/bbb/file.pdf
  4. 路由必须与 pdf 之前和之后的任何语言匹配:site.com/en/pdf/aaa/bbb/file.pdf

以下路线应涵盖上述每一条。

global_pdf_1:
class: myRequestRoute
url: /pdf/:filename.pdf
param: { module: location, action: test }
requirements: { sf_method: get }

global_pdf_2:
class: myRequestRoute
url: /pdf/:anything/:filename.pdf
param: { module: location, action: test }
requirements: { sf_method: get, anything: .* }

global_pdf_3:
class: myRequestRoute
url: /:sf_culture/pdf/:filename.pdf
param: { module: location, action: test }
requirements: { sf_method: get }

global_pdf_4:
class: myRequestRoute
url: /:sf_culture/pdf/:anything/:filename.pdf
param: { module: location, action: test }
requirements: { sf_method: get, anything: .* }

【讨论】:

    【解决方案2】:

    您的匹配项应该是以冒号开头的变量:

    culture_dir_pdf:
      url: /:sf_culture/pdf/:dirname/:filename.pdf
      param: { module: pdf, action: showEmbed }
      requirements: { sf_method: get }
    
    culture_pdf:
      url: /:sf_culture/pdf/:filename.pdf
      param: { module: pdf, action: showEmbed }
      requirements: { sf_method: get }
    
    global_dir_pdf:
      url: /pdf/:dirname/:filename.pdf
      param: { module: pdf, action: showEmbed }
      requirements: { sf_method: get }
    
    # ...
    

    然后您可以在 showEmbed 操作中使用这些请求变量。

    如果您需要高级匹配逻辑,我会使用 Apache Rewrite 将 PDF 请求指向单个 URL,然后将 URL 添加到您的 routing.yml 中。

    【讨论】:

    • 它对我不起作用 Apache 404 - 未找到 在此服务器上未找到请求的 URL /pdf/forexbook/en/Forex_Trading_Strategies.pdf。
    • 也许我弄错了你的问题。该文件是否存在于 http://your-domain/pdf/forexbook/en/Forex_Trading_Strategies.pdf?
    • 此网址的文件不存在
    • 好的,然后除了为所有路径级别创建路由(/pdf/forexbook/en/Forex_Trading_Strategies.pdf => url: /pdf/:param1/:param2/:filename.pdf),我' d 建议创建一个 Apache 正则表达式重写规则以匹配所有将重定向到唯一 symfony 路由的 PDF url。
    猜你喜欢
    • 1970-01-01
    • 2011-04-18
    • 2012-07-25
    • 2011-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    相关资源
    最近更新 更多