【发布时间】:2017-02-17 16:48:20
【问题描述】:
我正在构建一个服务(称为“dynamic_query”),我用它来将所有实体公开给一个 REST API,所以如果我有一个像这样的实体图:
[大陆--(有很多)-->国家--(有很多)-->城市]
我可以通过 URL 获取非洲的国家(JSON 列表):
http://www.example.com/country/api/?continent=africa
即使对于间接相关的实体,我仍然可以获得结果: 例如,列出属于欧洲国家的所有城市:
http://www.example.com/city/api/?continent=europe
该服务已经准备好并经过测试,这里以我在 City Controller 中的使用方式为例:
/**
* City controller.
*
* @Route("city")
*/
class CityController extends Controller
{
/**
*
* @Route("/api/", name="city_api",options = { "expose" = true })
* @Method("GET")
*
*/
public function apiAction(Request $request)
{
$conditions=$request->query->all();
$results=$this->get("app.dynamic_query")
->narrow("city",$conditions);
return new Response($results);
}
}
我现在正在寻找的是找到一种方法来“复制”这个 apiAction() ** 及其路由** 并使其在我的包中的每个实体中都可用,所以每当我访问时:
http://www.example.com/entity/api/?arg_1=val_1&arg_2=val_2&arg_n=val_n
我在 apiAction() 中得到了完全相同的逻辑,除了 $entity_name 和路由名称/uri 应该动态更改以适应 api 查询
【问题讨论】:
-
听起来您想要某种不在“/city”路由前缀中的全局控制器。在此控制器中,您可以配置带有可变部分的路由,例如
/{entity}/api用于方法 GET。然后有一个 switch 语句或其他东西来根据路由 slug 获取实体的名称,并将 dql 的 FROM 部分更改为使用此实体名称。
标签: php controller symfony