Я использую Symfony2 с FOSRestBundle. Возможно ли иметь функциональные возможности аннотаций @QueryParam и @RequestParam без использования аннотаций?Symfony - запрос фильтра с помощью FOSRestBundle и body_listener без аннотаций?
Я пытаюсь создать json api (format), поэтому я хочу разрешить параметры запроса, такие как include, page, filter, fields и sort. Моим идеальным способом справиться с этим было бы:
- Используйте format_listener, чтобы определить, что это json.
- Используйте обработчик json для обработки запроса, чтобы он был похож на this.
- Контроллер проверяет параметры запроса/запроса внутри функции действия и генерирует исключение, которое должно обрабатываться контроллером исключения, если оно недействительно. (Body_listener будет действовать как помощник, чтобы облегчить извлечение данных из запроса в контроллере, но контроллер принимает решения о том, что делать с этими данными.)
Я в основном зациклен на том, как создать пользовательский body_listener. Я не уверен, что мне нужно будет создать собственный декодер или нормализатор, и что этот класс может выглядеть, так как они не дают никаких примеров.
Грубый код какой контроллер будет выглядеть следующим образом:
<?php
namespace CoreBundle\Controller;
use FOS\RestBundle\Controller\FOSRestController;
use FOS\RestBundle\View\View;
use FOS\RestBundle\Context\Context;
use Psr\Http\Message\ServerRequestInterface;
class SiteController extends FOSRestController
{
public function getAction($id, ServerRequestInterface $request)
{
try {
// Validate $request. This is where the query/request
// param annotation functionality would be replaced.
} catch (Exception $e) {
throw new InvalidRequestException($e);
}
$siteService = $this->get('app.site_service');
$site = $siteService->getSite($id);
$context = new Context();
$context->setVersion($request->getVersion());
// Ex: /sites/63?fields[sites]=name,address&fields[company]=foo,bar
if ($request->hasIncludeFields()) {
$context->addAttribute('include_fields', $request->getIncludeFields()); // Or however to do this
}
$view = new View($site, 200);
$view->setContext($context);
return $view;
}
}
Можно ли иметь контроллер получить ParamFetcher и объект запроса? – GreeKatrina
@GreeKatrina да как в обычном контроллере symfony –