Я сделал контроллер покоя для объектов Movie с действием get.
Мой менеджер баз данных один фильм с id:3
.
Когда я пытаюсь получить доступ к localhost:8000/api/movie/3
или любой другой идее на этот счет, она сразу же возвращается к странице, с которой я пришел, только с намеком на отсутствие ответа на контент.
[Tue May 29 16:06:42 2018] 127.0.0.1:61540 [204]: /api/movie/3
Iиметь следующие конфигурации:
services.yaml
services:
...
sensio_framework_extra.view.listener:
alias: Sensio\Bundle\FrameworkExtraBundle\EventListener\TemplateListener
...
routs / rest.yaml
movies:
type: rest
resource: App\Controller\MovieController
prefix: /api
packages / fos_rest.yaml
fos_rest:
param_fetcher_listener: true
allowed_methods_listener: true
routing_loader:
include_format: false
view:
view_response_listener: 'force'
format_listener:
rules:
- { path: '^/api', priorities: ['json'], fallback_format: 'json' }
zone:
- { path: ^/api/* }
packages / framework.yaml:
framework:
...
templating: { engines: ['twig'] }
и следующие файлы:
Controller / MovieController.php
<?php
namespace App\Controller;
use FOS\RestBundle\Controller\Annotations as Rest;
use FOS\RestBundle\Routing\ClassResourceInterface;
use FOS\RestBundle\Controller\FOSRestController;
/**
* @Rest\RouteResource("Movie", pluralize=false)
*/
class MovieController extends FOSRestController implements ClassResourceInterface {
/**
* @Rest\View()
* @Rest\Get("/movie/{id}")
*/
public function getAction(string $id) {}
}
Entity / Movie.php
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="App\Repository\MovieRepository")
*/
class Movie {
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=32)
*/
private $title;
public function __construct($title) {
$this->title = $title;
}
...
}
Отладочный маршрутизатор дает мне такой результат:
$ bin/console debug:router | grep movie
get_movie GET ANY ANY /api/movie/{id}
[обновление]
Из-за более ранних неправильных конфигураций я обнаружил ошибки:
1
Предупреждение: ReflectionObject :: __ construct () ожидает, что параметр 1 будет объектом, значение NULL
2
Экземпляр Symfony \ Bundle \ФрамeworkBundle \ Templating \ EngineInterface> должен быть вставлен в FOS \ RestBundle \ View \ ViewHandler для визуализации шаблонов.
3
Ошибка типа: аргумент 2 передан Twig_Environment ::render () должен иметь тип массива
4
Нет зарегистрированных путей для пространства имен "FOSRest".
5
SyntaxError: JSON.parse: неожиданный символ в строке 1 столбца 1 данных JSON