0

我终于在 Symfony3 中获得了我的第一个 API,它实际上正在工作。到目前为止非常好,但是当我尝试使用YML配置进行路由而不是annotation. 它让我发疯,因为它似乎可以工作,事实上,当我有机会获得控制器名称时,它会给我一个内部服务器错误,但是当一切都“正确”时,它似乎无法在我的控制器中找到该方法。所以这是我的代码:

常规路由设置

#config/routing.yml
user_routes:
    resource: "@AppBundle/Resources/config/user_routes.yml"
    type: rest

捆绑路由设置

#AppBundle/Resources/config/user_routes.yml
user:
    type: rest
    resource: AppBundle\Controller\UserController

最后是我的控制器:

   <?php

    namespace AppBundle\Controller;

    use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
    use Symfony\Bundle\FrameworkBundle\Controller\Controller;
    use FOS\RestBundle\Controller\Annotations as Rest;
    use FOS\RestBundle\Controller\FOSRestController;
    use Symfony\Component\HttpFoundation\Request;
    use Symfony\Component\HttpFoundation\Response;
    use FOS\RestBundle\View\View;
    use AppBundle\Entity\User;


    class UserController extends FOSRestController
    {

    //    /**
    //     * @Rest\Get("/user")
    //     */
        public function getAction()
        {
            $restresult = $this->getDoctrine()->getRepository('AppBundle:User')->findAll();
            if ($restresult === null) {
                return new View("there are no users exist", Response::HTTP_NOT_FOUND);
            }

            return $restresult;
        }
}

使用annotation它效果很好,每个人都很高兴,但是当我使用这些设置时,我得到一个 404。我尝试根据 Symfony 官方文档添加prefix: /apiname_prefix: api_,但它没有用。我也尝试添加一个defaults: { _controller: AppBundle:Controller:UserController:get但错误 404 总是在拐角处。正如我所说,如果我在 中更改控制器类的名称user_routes.yml,我会收到 500 错误,因此似乎正在读取路由,但很明显这里缺少某些东西,我在官方文档中也找不到它其他地方也不行。

4

2 回答 2

0

好吧,以防万一它对某人有用,我找到了解决方案。问题出在yml user_routes.yml. 这是正确的配置:

path: /user
defaults: { _controller: AppBundle:User:get }
requirements:
    _method: GET

而已 ;)

于 2017-06-27T13:52:51.123 回答
0

从此更改操作的名称:

public function getAction()

对此:

public function getUsersAction()

文档

于 2017-06-26T12:02:33.983 回答