我正在使用FOSRestBundle,我找不到如何拥有两个不同的端点,一个用于模板渲染(例如html / twig,/app
),另一个用于序列化(json,{ {1}}例如)。可能吗 ? FOSRestBundle Automatic Route generation的文档并未指出任何此类文档。
使用Symfony 3和FOSRestBundle 2.x
答案 0 :(得分:2)
您可以通过app / config.yml中的格式侦听器进行配置。
fos_rest:
format_listener:
rules:
- { path: '^/api', priorities: [json], fallback_format: json, prefer_extension: false }
- { path: '^/', priorities: ['text/html', '*/*'], fallback_format: html, prefer_extension: false }
param_fetcher_listener: force
view:
view_response_listener: force
formats:
json: true
html: true
关于路由部分,这是一个具有两个动作的控制器的示例,每个动作对应一种响应(注释):
namespace RVW\AppBundle\Controller;
use FOS\RestBundle\Controller\Annotations\Route;
use FOS\RestBundle\Controller\FOSRestController;
use FOS\RestBundle\Controller\Annotations\View;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
class BrandController extends FOSRestController
{
/**
* @param Request $request
* @View(statusCode=Response::HTTP_OK)
* @Route("/brands", name="brands")
* @Method({"GET"})
*
* @return View
*/
public function brandsAction(Request $request): View
{
return $this->container->get('doctrine')->getRepository('AppBundle:Brand')->findAll();
}
/**
* @Route("/", name="index")
*
* @return Response
*/
public function indexAction(Request $request): Response
{
return $this->render('@App/index.html.twig', [
'data' => $data,
]);
}
}
干杯,
答案 1 :(得分:0)
只需在路由配置中指定prefix
。
如果您使用的是YAML,则可以更改routing.yml
文件:
app:
resource: '@AppBundle/Controller/'
type: annotation
prefix: /app
api:
type: rest
resource: AppBundle\Controller\RestController
prefix: /api
现在您的正常路线以/app
开头,您的REST路线以/api