【发布时间】:2018-05-20 01:37:10
【问题描述】:
在Controller中,你可以定义一个更新动作:
/**
* @Route("/product/edit/{id}")
*/
public function updateAction(Product $product)
{
// product is auto select from database by id and inject to controller action.
}
自动注入很方便,但是如何将Doctrine Manager实例注入到控制器动作中,不用手动创建Doctrine Manager实例会更方便。如下:
/**
* @Route("/product/edit/{id}")
*/
public function updateAction(Product $product, ObjectManager $em)
{
$product->setName("new name");
$em->flush();
}
而不是长编码:
/**
* @Route("/product/edit/{id}")
*/
public function updateAction($id)
{
$em = $this->getDoctrine()->getManager();
$product = $em->getRepository(Product::class)->find($id);
if (!$product) {
throw $this->createNotFoundException(
'No product found for id '.$id
);
}
$product->setName('New product name!');
$em->flush();
return $this->redirectToRoute('app_product_show', [
'id' => $product->getId()
]);
}
【问题讨论】:
标签: php symfony doctrine symfony4