【问题标题】:symfony2 controller needs two ways of return-values, one for symfony-application (inside symfony) one for mobile (json)symfony2 控制器需要两种返回值方式,一种用于 symfony-application(在 symfony 内部),另一种用于移动(json)
【发布时间】:2013-02-19 19:13:09
【问题描述】:

我正在尝试为我的 Symfony2 应用程序构建一个安静的 JSON api。

我正在使用http://jmsyst.com/libs/serializer JMS\Serializer Bundle 将我的实体序列化为JSON

我有这个例子Controller-Action:

public function getFarmerByNameAction(Request $request) {
    $this->setLocale($request);

    $name = $request->get("name");
    $farmer = $this->getDoctrine()->getRepository("FarmerguideBackendBundle:Farmer")->findByName($name);

    // Return json response
    return new Response($this->jsonify($farmer));
}

因为我经常使用这个序列化程序(我知道我应该做一些类似单例的事情,但目前我没有时间,我只是在玩框架)我已经把执行序列化的函数内的代码。

private function jsonify($object) {
        // Serialize to json
        $serializer = new Serializer(array(new GetSetMethodNormalizer()), array('json' => new
                JsonEncoder()));
        $json = $serializer->serialize($object, 'json');
        return $json;
}

我的问题如下:

  • 此代码位于BackendController 中,不包含任何特定于gui 的信息。所以只是一个 RESTful API。
  • 在另一个控制器中,假设 WebappController 我有代码可以访问这些后端函数并使用 twig-files 和 render()-methods 做一些事情。
  • 我想通过 mobile 通过 ajax 访问所有这些信息(因此我需要这个 json 返回值)

这里的最佳实践是什么?最好说:好吧,如果它是一个ajax调用(检查if($request->isXmlHttpRequest())),在返回repsonse之前做jsonify,如果它没有返回实体(我需要twig-templates的实体..)或者还有另一个方法?

或者使用$request->getFormatType() 并使用contentType="application/json; charset=utf-8" 进行ajax 调用会更好

【问题讨论】:

标签: ajax json symfony mobile-website


【解决方案1】:

【讨论】:

  • 嗯,这看起来不错,但是保存或提交的格式在哪里?
【解决方案2】:

我想你需要弄清楚你的意图是什么。因为现在您的WebappController 似乎只是您的Backendcontroller 的客户。比如:

$result = file_get_contents('/path/to/backend/method/1/3');

然后您只需继续解码 json。

这当然是一些额外的开销。如果您想获取实体,我建议为您的所有后端方法创建一个服务并在那里返回实体。然后,您只需从您的BackendController 和您的WebappController 调用这些方法。然后,您只需将 BackendController 中的实体 jsonify 并在您的 WebappController 中呈现适当的模板。

【讨论】:

    猜你喜欢
    • 2010-12-16
    • 2016-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-19
    • 2012-02-25
    • 2014-07-21
    • 1970-01-01
    相关资源
    最近更新 更多