symfony3 / php:从url中检索api的属性

时间:2017-06-18 14:28:25

标签: php api symfony

对于数据表,我必须使用REST API。

我的网址是例如: http://localhost:8000/trial/1

在此页面中进行api调用我使用以下内容:

url: "rest->{{ path('erp_interventionapi_get') }}",

我需要获取attribut id =“1”来进行正确的调用(在数据库中通过id查找),但我不知道如何获取它。

我试过这个

    /**
 * @Rest\Get("/api_i/get")
 */
public function getAction(Request $request)
{
    $id = $request->attributes->get('id');
    $em = $this->getDoctrine()->getManager();
    $trial = $em->find('ErpBundle:Trial', $id);
    return $em->getRepository('ErpBundle:Intervention')->findBy(array('trial' => $trial));
}

但是我有这条错误消息:

  

ErpBundle \ Entity \ Trial

的查询缺少标识符ID

以下情况也不起作用:

    /**
 * @Rest\Get("/api_i/get")
 */
public function getAction($id)
{
    $em = $this->getDoctrine()->getManager();
    $trial = $em->find('ErpBundle:Trial', $id);
    return $em->getRepository('ErpBundle:Intervention')->findBy(array('trial' => $trial));
}

我想是因为它试图从url / api_i / get中检索id而不是从网页本身检索id。

那么可以从我调用API的url中获取属性吗?

对不起,如果我在说话的方式上犯了错误,我对此仍然很陌生:)

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

您需要在路径功能中设置ID:

{{ path('erp_interventionapi_get', {id: app.request.attributes.get('id')}) }}

答案 1 :(得分:0)

我的假设是你传递了Trial对象(作为列表或单个对象),所以当你使用Symfony的Twig函数path()时(注意,这不是一个Twig函数,它来自Symfony的Twig包),你需要传入id:

{{ path('erp_interventionapi_get', { id: trial.id }) }}

或者,或者:

{% for trial in trials %}
    {{ path('erp_interventionapi_get', { id: trial.id }) }}
{% endfor %}

https://symfony.com/doc/current/templating.html#linking-to-pages

注意,如果您将此输出为基于SPA或基于窗口小部件的消费的JSON,我建议将其作为客户端路由器策略进行输出,例如,使用序列化数据在客户端上构建路由(无嵌入式URL)。例如,在Backbone中你会告诉它如何"得到"到像这样的资源:

this.route("trial/:id", "trial", function(id){ ... });

http://backbonejs.org/#Router