代码之家  ›  专栏  ›  技术社区  ›  rmsluimers

fosrestbundle与symfony4 204的问题没有内容响应

  •  0
  • rmsluimers  · 技术社区  · 6 年前

    我用get操作为电影对象制作了一个rest控制器。

    我的数据库管理器一部电影 id:3 .

    enter image description here

    当我试图进入 localhost:8000/api/movie/3 或者其他任何关于这个问题的想法,它直接返回到我来自的页面,只是一个没有内容响应的提示。

    [Tue May 29 16:06:42 2018] 127.0.0.1:61540 [204]: /api/movie/3
    

    我有以下配置:

    服务.yaml

    services:
        ...
        sensio_framework_extra.view.listener:
            alias: Sensio\Bundle\FrameworkExtraBundle\EventListener\TemplateListener
        ...
    

    路线/休息.yaml

    movies:
        type:     rest
        resource: App\Controller\MovieController
        prefix: /api
    

    包裹/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/* }
    

    包/框架.yaml:

    framework:
        ...
        templating: { engines: ['twig'] }
    

    以及以下文件:

    控制器/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) {}
    
    }
    

    实体/电影.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}
    

    [更新]

    由于之前的错误配置,我遇到了以下错误:

    警告:ReflectionObject::\uuu construct()要求参数1为对象,给定空值

    必须将symfony\bundle\frameworkbundle\templateing\engineinterface>的实例注入fos\restbundle\view\viewhandler以呈现模板。

    类型错误:参数2传递给了twig_environment::render()。 必须是数组类型

    命名空间“fosrest”没有已注册的路径。

    语法错误:json.parse:json数据的第1行第1列出现意外字符

    2 回复  |  直到 6 年前
        1
  •  0
  •   rmsluimers    6 年前

    moviecontroller.php文件

    <?php
    
    namespace App\Controller;
    
    use App\Repository\MovieRepository;
    use Doctrine\ORM\EntityManagerInterface;
    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 {
    
        /**
         * @var EntityManagerInterface
         */
        private $entityManager;
    
        /**
         * @var MovieRepository
         */
        private $movieRepository;
    
        public function __construct(
            EntityManagerInterface $entityManager,
            MovieRepository $movieRepository
        ) {
            $this->entityManager       = $entityManager;
            $this->movieRepository     = $movieRepository;
        }
    
        public function getAction(string $id) {
            $movie = $this->movieRepository->find($id);
    
            if($movie === null) {
                throw new NotFoundHttpException();
            }
    
            return $this->view($movie);
        }
    }
    
        2
  •  0
  •   Elomri Jamal    6 年前

    您应该在视图注释参数中添加populatedefaultvars,如下所示:

    /** * *@rest\view(populatedefaultvars=false) **