【问题标题】:symfony3 REST API issue with yml routing using FOSRestBundle使用 FOSRestBundle 的 yml 路由的 symfony3 REST API 问题
【发布时间】:2017-06-26 12:00:16
【问题描述】:

我终于在 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 错误,因此似乎正在读取路由,但很明显这里缺少某些东西,我无法找到它官方文档或其他地方。

【问题讨论】:

    标签: symfony routing fosrestbundle symfony-3.3


    【解决方案1】:

    从此更改操作的名称:

    public function getAction()
    

    到这里:

    public function getUsersAction()
    

    DOCUMENTATION

    【讨论】:

    • 我试过了,但没有用,但尝试使用 getUserAction 时出现错误:Call to a member function has() on null&lt;/p&gt;....
    • 你能告诉我你想查看哪条路线吗? yoursite.com/users ?
    • 路由是domain/user
    • 您需要更改到域/用户的路由,因为如果您想休息 api,您需要遵循其规则
    • 刚刚完成但我收到此错误错误:Call to a member function has() on null
    【解决方案2】:

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

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

    就是这样;)

    【讨论】:

      猜你喜欢
      • 2021-02-05
      • 2013-03-14
      • 1970-01-01
      • 1970-01-01
      • 2017-05-06
      • 2021-03-17
      • 1970-01-01
      • 1970-01-01
      • 2017-09-21
      相关资源
      最近更新 更多