Symfony生成错误的url与double /

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Symfony生成错误的url与double /相关的知识,希望对你有一定的参考价值。

我正在研究一个symfony3项目,我遇到了一个问题,

我们正在发送基于树枝的电子邮件,其中包含一个指向我们平台的链接的按钮。

Button example

打开文档按钮链接如下:

app.example.com/books/book ID/怕个ID

这是通过树枝生成的:

url("open_book", { bookId: book_id, pageId: page_id })

并且url在控制器文件上定义,带有注释

@Route("/book/{bookId}/{pageId}", name="open_book")

因此,用户在电子邮件中获得的链接是原始的,但在书籍之前有双倍//,如下所示:

app.example.com//books/book ID/怕个ID

我正在研究最后一个twig版本,我不知道它是否也可能是symfony问题,因为它只发生在我们的prod环境中(它适用于本地,是的)

如果有帮助,我们的routing.yml

app:
    resource: "@BooksBundle/Controller/"
    type:     annotation
    prefix:   /
    host:     app.%host%

这只发生在由树枝生成的网址上。我们也使用jms翻译和jms i18n包,所以我想也许它试图在/ /之后设置一个空的语言环境:

app.example.com/恩/books/book ID/怕个ID

但是,不是恩,而是一种空洞的语言。

任何想法开始?

更新3/01/18嘿!谢谢你的所有答案。看来这是symfony配置的最终问题......

在文件parameters.yml:

router.request_context.scheme: '%env(ROUTER_REQUEST_CONTEXT_SCHEME)%'
router.request_context.host: '%env(ROUTER_REQUEST_CONTEXT_HOST)%'
router.request_context.base_url: '%env(ROUTER_REQUEST_CONTEXT_BASE_URL)%'

那么我们对base_url的值是/。似乎这是真正的问题。删除/打开该参数可以解决问题。

谢谢!!

答案

对于控制器中的每个路径,您使用前缀/

app:
    resource: "@BooksBundle/Controller/"
    type:     annotation
    prefix:   /
    host:     app.%host%

这意味着每条路线都像:

@Route("/book/{bookId}/{pageId}", name="open_book")

将以/为前缀。最后这条路线将是//book/{bookId}/{pageId}。有些库会截断路径值,而其他库则不会。

所以只需完全删除prefix参数或声明路径路径而不带前导斜杠:

@Route("book/{bookId}/{pageId}", name="open_book")
另一答案

尝试更换此行

  url("open_book", { bookId: book_id, pageId: page_id })

通过

  url("open_book", { bookId: book_id, pageId: page_id }) | replace({'//': "/"})

要么

{{ app.request.schemeAndHttpHost }} {{ path("open_book", { bookId: book_id, pageId: page_id }) }}

以上是关于Symfony生成错误的url与double /的主要内容,如果未能解决你的问题,请参考以下文章

在 Symfony 5 中使用 GET 参数生成 URL

Symfony Url Generator 在登录之前和之后从同一路由生成不同的 URL

Symfony 1.4为当前应用程序生成url

symfony 中带有域名的 URL

在 symfony 中重定向到“/”路由

无法为命名路由“克隆”生成 URL