【问题标题】:Symfony2 Accessing route variablesSymfony2 访问路由变量
【发布时间】:2012-07-29 01:17:38
【问题描述】:

我知道我可以通过$request->get('_route'); 访问当前路线名称。

如果我的路线是这样定义的:

/*
 * @Route("/get_by_category/{id}", defaults={"id" = 0}, name="get_products_by_category")
 */

如何从服务中检索id 变量?

【问题讨论】:

    标签: php symfony routing


    【解决方案1】:

    你可以的

    /*
    * @Route("/get_by_category/{id}", defaults={"id" = 0}, name="get_products_by_category")
    */
    public function getProductsAction($id)
    {
    }
    

    $id 变量将在控制器中可用。

    【讨论】:

    • 这是正确的,假设我想从控制器访问它。我已经编辑了问题 - 我想从服务中访问它。
    • @acid 我认为将 id 传递给服务调用会更好,这样服务就不需要知道请求——或者 id 的来源。
    【解决方案2】:

    您可以从Request获取所有路由相关参数

    $routeParams = $request->attributes->get('_route_params');
    $id = $routeParams['id'];
    

    【讨论】:

    • 虽然它不起作用 - $request->attributes->all() 没有返回 _route_params,但它确实提出了解决方案。谢谢!
    【解决方案3】:

    $request->attributes->get('id') 可以解决问题。

    【讨论】:

      【解决方案4】:

      在 Symfony 3.4 中,我刚刚添加了 function functionName(int $id) 并且变量 $id 已在函数范围内定义。我的路径是something/{id}。对于多个参数like/{id}/that.{format},我只是在函数中添加了第二个参数:function functionName(int $id, string $format),并且它们都在作用域内。事实上,我的functionName 是一个用作路由控制器的类中的__invoke

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-04
        • 2012-05-12
        • 2016-03-10
        相关资源
        最近更新 更多