我创建了一个BaseController来进行通用的REST Api调用,但在某些情况下,我需要对其进行扩展并更改一些代码。
class BaseController extends Controller {
/**
* @Route("/api/{entity_name}")
* @Method({"GET"})
* @Template()
*/
public function indexAction($entity_name) {
$inflector = new Inflector();
$class_name = ucfirst($inflector->camelize($entity_name));
$entities = $this->getDoctrine()->getManager()->getRepository('AppApiBundle:' . $class_name)->findAll();
$serializer = $this->get('jms_serializer');
return new JsonResponse($serializer->serialize($entities, 'json'), 200);
}
/**
* @Route("/api/{entity_name}/{id}")
* * @Method({"GET"})
* @Template()
*/
public function getAction($entity_name, $id) {
$inflector = new Inflector();
$class_name = ucfirst($inflector->camelize($entity_name));
$entitiy = $this->getDoctrine()->getManager()->getRepository('AppApiBundle:' . $class_name)->find($id);
$serializer = $this->get('jms_serializer');
return new JsonResponse($serializer->serialize($entitiy, 'json'), 200);
}
/**
* @Route("/api/{entity_name}")
* @Method({"POST"})
* @Template()
*/
public function postAction($entity_name) {
return array(
// ...
);
}
/**
* @Route("/api/{entity_name}/{id}")
* @Method({"PUT"})
* @Template()
*/
public function putAction($entity_name, $id) {
return array(
// ...
);
}
/**
* @Route("/api/{entity_name}/{id}")
* @Method({"DELETE"})
* @Template()
*/
public function deleteAction($entity_name, $id) {
return array(
// ...
);
}
}
class CountryController extends BaseController {
/**
* @Route("/api/country")
* @Method({"GET"})
* @Template()
*/
public function getAllAction() {
/**
* Another business rules here
*/
return array();
}
}
然后,如果我调用"/api/country"
Symfony2调用BaseController的"/api/{entity_name}"
路由而不是覆盖路由CountryController的"/api/country"
。
有人知道如何解决这个问题吗?
提前致谢。
答案 0 :(得分:0)
Symfony按照遇到的顺序检查路线。您需要更改路由配置文件中条目的顺序。
或者,在您的@Route
注释中添加一个需求参数,将'country'
排除在可能的匹配范围之外。