我终于在 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: /api和name_prefix: api_,但它没有用。我也尝试添加一个defaults: { _controller: AppBundle:Controller:UserController:get但错误 404 总是在拐角处。正如我所说,如果我在 中更改控制器类的名称user_routes.yml,我会收到 500 错误,因此似乎正在读取路由,但很明显这里缺少某些东西,我在官方文档中也找不到它其他地方也不行。