未找到FosBundle路线

时间:2017-05-02 07:02:25

标签: php rest symfony fosrestbundle

目前正在关注Symfony 3.x的how to create Rest API教程。

我的问题是使用此代码时遇到getAction()方法。

namespace SwipeBundle\Controller\Backend\API;

use FOS\RestBundle\Controller\Annotations as Rest;
use FOS\RestBundle\Controller\FOSRestController;
use Symfony\Component\HttpFoundation\Response;
use FOS\RestBundle\View\View;

class UserController extends FOSRestController
{
    /**
     * @Rest\Get("/api/user")
     */
    public function getAction() {
        $restresult = $this->getDoctrine()
            ->getRepository('SwipeBundle:User')
            ->findAll();

        if ($restresult) {
            return new View("there are no users exist", Response::HTTP_NOT_FOUND);
        }
        return $restresult;
    }
}

检查日志中的错误:

  

未捕获的PHP异常   Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException:" No   找到" GET / api / user""在   /home/swipecom/contactless/var/cache/prod/classes.php第4595行   {"例外":" [对象]   (Symfony的\元器件\ HttpKernel \异常\ NotFoundHttpException(代码:   0):找不到\" GET / api / user \"在   /home/swipecom/contactless/var/cache/prod/classes.php:4595,   Symfony的\分量\路由\异常\ ResourceNotFoundException(代码:   0):at   /home/swipecom/contactless/var/cache/prod/appProdProjectContainerUrlMatcher.php:750)"}   []

我检查并配置了FOSRest configuration and Nelmio,但仍无效。

这是:

# Nelmio CORS Configuration
nelmio_cors:
    defaults:
        allow_credentials: false
        allow_origin: ['*']
        allow_headers: ['*']
        allow_methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS']
        max_age: 3600
        hosts: []
        origin_regex: false

# FOSRest Configuration
fos_rest:
    body_listener: true
    format_listener:
        rules:
            - { path: '^/', priorities: ['text/html'], fallback_format: html, prefer_extension: false }
            - { path: '^/api/', priorities: ['json'], fallback_format: json, prefer_extension: false }
    param_fetcher_listener: true
    view:
        view_response_listener: 'force'
        formats:
            json: true
            xml: true
            yml: true

1 个答案:

答案 0 :(得分:0)

使用path属性作为示例:

 * @Rest\Get(path="/api/user")

而不是

 * @Rest\Get("/api/user")

您可以使用控制台命令进行调试:

显示所有可用路线:

  

console debug:router

查看与您的路线匹配的人:

  

console router:match / api / user

NB:

如果问题仍然存在,请使用命令

进行检查
  

console debug:router --show-controllers

并寻找你的控制器,看看会发生什么。例如,如果未列出您的控制器,请按文档here中所述检查路由配置。

希望这个帮助