我对这个问题很困惑,如果有人能用具体的例子给我一个解释,我会很高兴。我使用Symfony生成了一个CRUD控制器,并且还为REST实现了FOSRestBundle Controller。他们都返回相同的数据,我想知道,有什么区别,另一个不能做什么呢?我想在我正在创建和扩展的原型中只坚持一个,只要我理解Symfony2的做事方式。这是来自Symfony2的CRUD代码:
/**
* Lists all User entities.
*
* @Route("/", name="user")
* @Method("GET")
* @Template()
*/
public function indexAction()
{
$em = $this->getDoctrine()->getManager();
$entities = $em->getRepository('SomethingWebServicesBundle:User')->findAll();
return array(
'entities' => $entities,
);
}
通过更改此方法名称,我得到一个FOSRestController(配置正确完成)
// "get_users" [GET] /users
public function getUsersAction()
{
$em = $this->getDoctrine()->getManager();
$entities = $em->getRepository('SomethingWebServicesBundle:Users')->findAll();
return array(
'entities' => $entities,
);
}
答案 0 :(得分:1)
它们都是控制器,你应该只使用一个用于相同的任务。
默认的symfony控制器只是一个具有方便性方法的类,可以轻松访问最常用的东西(例如,创建表单,重定向等)。你不必扩展这个控制器,它只是给你一些“额外的”。
FOSRestController扩展了Symfony控制器,并在使用FOSRestBundle时添加了一些方便的方法。同样,您不必使用它,它只是简化了代码。
所以说,控制器没有做任何特别的事情。您可以完全跳过它们并使用自己的东西,很多人也不愿意从基本控制器扩展,因为它意味着Service Locator反模式。
要获得FOSRestBundle可以执行的操作的答案,您应该阅读their docs