【问题标题】:What is the difference between generated Symfony2 controller and FOSRestBundle controller?生成的 Symfony2 控制器和 FOSRestBundle 控制器有什么区别?
【发布时间】:2013-12-24 14:53:10
【问题描述】:

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

【问题讨论】:

    标签: php symfony crud fosrestbundle


    【解决方案1】:

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

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

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

    话虽如此,控制器并没有做任何特别的事情。你可以完全跳过它们并使用你自己的东西,很多人也更喜欢不从基本控制器扩展,因为它暗示了服务定位器反模式。

    要获得有关 FOSRestBundle 可以做什么的答案,您应该阅读their docs

    【讨论】:

    • Wouter J,我现在有两个,但实际上,我更喜欢 Symfony2 CRUD 控制器,因为我可以更快地创建它们并同时标准化我的代码(原型)。现在,我只认为我需要它们能够一直返回 JSON。我怎样才能让他们只返回 JSON 数据?如果他们这样做,那是我可以让他们最接近 RESTful 的吗?
    • 如前所述,FOSRestController 所做的唯一一件事就是为您提供快捷方式的方法。看看这些方法实际上做了什么(它们只调用一个外观 iirc)并在你的 symfony CRUD 控制器中使用它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-28
    • 1970-01-01
    • 2021-06-10
    • 2012-05-07
    • 2018-06-03
    • 2011-04-14
    • 1970-01-01
    相关资源
    最近更新 更多