【问题标题】:Symfony 2 or 3 ParamConverterSymfony 2 或 3 参数转换器
【发布时间】:2017-02-01 22:27:42
【问题描述】:

我不明白一个问题。 当使用带有路由示例的控制器时

/**
 * @Route("/news/comment-delete/{comment_id}",
 *      name = "blog_deleteComment"
 * )
 *  @ParamConverter("comment", class="pfrechowiczBlogBundle:Comment", options={"id" = "comment_id"})
 */

并在 HTML 中为控制器提供参数

<a href="{{ path('blog_deleteComment', {'comment_id' : comment.id}) }}" class="blog_deleteComment" >Usuń</a>

它工作正常,但是当我将“_”更改为“-”时它不起作用,我不知道为什么找不到答案。只有当必须使用带有“-”的 URL 的 ParamConverter 而没有使用“-”的 ParamConverter 的 Route 时才会出现此问题。

这个例子不起作用:

    /**
     * @Route("/news/comment-delete/{comment-id}",
     *      name = "blog_deleteComment"
     * )
     *  @ParamConverter("comment", class="pfrechowiczBlogBundle:Comment", options={"id" = "comment-id"})
     */

和 HTML 代码:

<a href="{{ path('blog_deleteComment', {'comment-id' : comment.id}) }}" class="blog_deleteComment" >Usuń</a>

有人能解释一下吗?

【问题讨论】:

  • 如果您的网址看起来像:/news/comment-delete/12345
  • “不工作”是什么意思?您是否收到有意义的错误消息,或者它只是无法解析 URL 并静默失败?我之所以问,是因为这可能是 symfony 可以改进的地方,它是“DX 倡议”的术语
  • 它的消息无法识别它是什么类型的对象

标签: php controller routing symfony


【解决方案1】:

不存在名为 $var-iable 的变量,因为它等同于 $var - iable。您不希望从 $var 中减去一个不存在的常量的结果... PHP 不允许变量在其名称中包含连字符,因为区分减法和实际变量会过于混乱。

您可以创建一个名为 $var_iable 的变量。您的路由中 {} 附件之间的内容会根据您的名称转换为 $variable 并传递到您的控制器方法中。 Symfony 已经解决了 PHP 的变量中不允许使用连字符的问题。

tldr:使用驼峰式大小写或下划线。

【讨论】:

    【解决方案2】:

    PHP 语法不允许在变量名中使用连字符。

    【讨论】:

      【解决方案3】:

      我一直试图遵循这样的规则,即一条路线应该始终遵循类似的规则

      <controller>/action/{id}
      

      其中 id 是可选的。虽然我经常读到破折号更适合在 URL 中使用而不是下划线,但我尽量避免两者。你的路线最好是这样的:

      * @Route("/news/comment/delete/{id}",
      

      甚至更好

      * @Route("/comment/delete/{id}",
      

      如果“新闻”不需要出现在 url 模式中,请将其省略。否则,您可以像在新闻部分中一样查看它,在评论控制器中有一个名为“delete”的操作,您正在传递一个“id”。您有“comment-id”,但很明显您正在传递评论 id。如果您有时间,请查看一些有关 RESTful URL 的文档。

      但要回答有关 php 编码的问题,我建议不要在 PHP 代码或 MySQL 数据库中使用破折号作为字段或表名。编码时最好使用下划线。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-10-21
        • 1970-01-01
        • 2017-07-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-21
        相关资源
        最近更新 更多