生成的Symfony2控制器和FOSRestBundle控制器有什么区别?

时间:2013-12-07 04:48:15

标签: php symfony crud fosrestbundle

我对这个问题很困惑,如果有人能用具体的例子给我一个解释,我会很高兴。我使用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,
    );
}

1 个答案:

答案 0 :(得分:1)

它们都是控制器,你应该只使用一个用于相同的任务。

默认的symfony控制器只是一个具有方便性方法的类,可以轻松访问最常用的东西(例如,创建表单,重定向等)。你不必扩展这个控制器,它只是给你一些“额外的”。

FOSRestController扩展了Symfony控制器,并在使用FOSRestBundle时添加了一些方便的方法。同样,您不必使用它,它只是简化了代码。

所以说,控制器没有做任何特别的事情。您可以完全跳过它们并使用自己的东西,很多人也不愿意从基本控制器扩展,因为它意味着Service Locator反模式。

要获得FOSRestBundle可以执行的操作的答案,您应该阅读their docs