生成的Symfony2控制器和FOSRestBundle控制器之间的区别是什么


What is the difference between generated Symfony2 controller and FOSRestBundle controller?

我对这个问题很困惑,如果有人能用具体的例子给我解释一下,我会很高兴的。我用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可以做什么的答案,您应该阅读他们的文档