如果你使用Doctrine会发生什么,你需要输入提示你的 $post 变量。在你完成之后,Doctrine's ParamConverter 会照顾其余的。现在,Symfony不知道如何关联你的 id url占位符到你的 $post 参数,因为它不知道哪个实体 $post 是指。用类型暗示类型 public function deletePost(Post $post) 使用ParamConverter,Symfony会知道这一点 $post 是指 Post 具有来自url的id的实体 id 占位符。
$post
id
public function deletePost(Post $post)
Post
来自doc:
通常,你期望show()的$ id参数。相反,通过创建一个新参数($ post)并使用Post类(一个Doctrine实体)对其进行类型提示,ParamConverter会自动查询其$ id属性与{id}值匹配的对象。如果找不到帖子,它也会显示404页面。
选民也会知道什么 $post 是和如何对待它。
既然你没有使用Doctrine,默认情况下你没有ParamConverter,正如我们刚才看到的,这是关键元素。所以你要做的就是定义你自己的ParamConverter。
这一页 Symfony文档将告诉您有关如何执行此操作的更多信息,尤其是最后一节“创建转换器”。您将不得不告诉它如何转换字符串 "id" 进入 Post 使用模型逻辑的对象。首先,你可以使它非常具体 Post 对象(您可能希望使用在注释中显式引用那个ParamConverter converter="name" 选项)。稍后,如果您有一个可用的版本,您可以使它更通用。
"id"
converter="name"