Symfony 2或3 ParamConverter

时间:2017-02-01 22:27:43

标签: php controller routing symfony

我不明白一个问题。 使用带路径示例

的控制器时
/**
 * @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>

它的工作还可以,但是当我将“_”更改为“ - ”时它不起作用,我不知道为什么找不到答案。这个问题只有在必须使用带有“ - ”的网址的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>

有人可以解释一下吗?

3 个答案:

答案 0 :(得分:3)

没有名为$ var-iable的变量,因为它等同于$var - iable。你不希望从$ var中减去不存在的常量的结果...... PHP不允许变量在其名称中包含连字符,因为在减法和实际变量之间进行区分会让人感到困惑。

您可以创建名为$var_iable的变量。路径中{}附件之间的内容将根据您的名称转换为$变量并传递到您的控制器方法中。 Symfony解决了PHP中的变量不允许使用连字符的事实。

tldr:使用驼峰案例或下划线。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

我一直试图遵循规则,即路线应该始终尝试遵循

之类的规则
<controller>/action/{id}

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

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

或更好

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

如果“新闻”不需要在网址模式中,请将其删除。否则你可以在新闻栏目中查看它,在评论控制器中有一个名为“删除”的动作,你传递的是“id”。你有“comment-id”,但很明显你传递了一个评论ID。如果您有时间查找有关RESTful URL的一些文档。

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