我正在尝试使用ParamConverter
作为可选参数
/**
* @Route("/item", name="item_new")
* @Route("/item/{id}", name="item")
* @ParamConverter("item", class="AppBundle:Item")
*/
public function stepStockReceptionAction(Item $item = null)
{
return new Response($item ? $item->getName() : 'New item');
}
我的$item
现在是可选的,但如果我提供了无效的商品ID,则只会将其视为null
GET /item/42 # <-- Non existant item
给出
新项目
如果该项目不存在,如何才能出现默认的404错误?
答案 0 :(得分:2)
引擎盖下发生了几件事:
转换器试图从中获取一个SensioBlogBundle:Post对象 请求属性(请求属性来自路径占位符 - 这里是id);
如果未找到Post对象,则生成404响应;
因此无论您如何定义Route和ParamConverter,它都会从请求中获取id
并尝试使用此id
查找Item。所以你有两个选择
/**
* @Route("/item/{id}", defaults={"id"=null}, name="work_with_item")
*/
public function stepStockReceptionAction(Request $request)
{
$item = $this->getDoctrine()->getRepository('AppBundle:Project')->find($request->query->get('id'));
return new Response($item ? $item->getName() : 'New item');
}