我对这个问题很困惑,如果有人能用具体的例子给我解释一下,我会很高兴的。我用Symfony生成了一个CRUD控制器,并为REST实现了FOSRestBundle控制器。它们都返回相同的数据,我想知道,有什么区别,一个能做什么,另一个不能做什么?我现在只想在我正在创建的原型中使用一个,一旦我了解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,
);
}
它们都是控制器,对于相同的任务应该只使用一个。
默认的symfony控制器只是一个带有方便方法的类,可以轻松访问最常用的东西(例如,创建表单、重定向等)。你不必扩展这个控制器,它只会给你一些"额外功能"。
FOSRestController扩展了Symfony控制器,并在使用FOSRestBundle时添加了一些方便的方法。同样,您不必使用它,它只是为您简化了代码。
也就是说,控制器没有做任何特别的事情。你可以完全跳过它们,转而使用你自己的东西,很多人也不喜欢从基本控制器扩展,因为这意味着服务定位器反模式。
要获得FOSRestBundle可以做什么的答案,您应该阅读他们的文档