如何使用FOSRestBundle为控制器的所有路由添加常规URI前缀?

AbV*_*Vog 2 php symfony fosrestbundle

我已经开始为使用Symfony开发的应用程序实现控制器.这是我第一次尝试同时使用Symfony和PHP:我通常使用Java,以及JAX-RS或Spring.我按照本教程.

我的测试类如下,URI /tags按预期工作:

namespace AppBundle\Controller;

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

class TagController extends FOSRestController
{
    /**
     * @Rest\Get("/tags")
     */
    public function getTagsAction(Request $request)
    {
        $data = ['getTagsAction' => 'not implemented yet'];
        $view = $this->view($data, Response::HTTP_OK);
        return $view;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想,仅使用注释,所有路由自动以"api"为前缀,以便/tags客户端使用/api/tags.

是否可以定义这样一个通用前缀,它会自动添加到所有函数的路径之前?阅读文档,我认为这个Docblock的补充将是答案:

/**
 * @Rest\Prefix("/api")
 */
class TagController extends FOSRestController
{
...
}
Run Code Online (Sandbox Code Playgroud)

然而,对另一个问题的这个答案似乎给出了@Prefix注释的不同含义.

此外,某处有路由缓存吗?未获取对路线的更改(tag而不是tags).我怀疑有一个动作可以通知框架更改路径或添加新控制器.

[编辑]确实有一个缓存/var/cache.我相信控制台获取通过浏览器看似忽略的更改的原因是控制台假设开发环境,而通过浏览器访问app.php(而不是app_dev.php).事实证明了这一点,它php bin/console debug:router --env=prod返回的路由集不同于php bin/console debug:router(环境规范已删除).清除缓存后,路由器或方法的更改在浏览器中有效:php bin/console cache:clear --env=prod.

tin*_*nos 5

您可以在类中使用路由注释,例如:

/**
 * @Route("/api")
 */
class TagController extends FOSRestController
{
    ...
Run Code Online (Sandbox Code Playgroud)


小智 5

适合我:

use FOS\RestBundle\Controller\Annotations as Rest;

/**
 * Class UsersController
 * @package AppBundle\Controller
 * @Rest\Route("api/user")
 */
class UsersController extends FOSRestController implements ClassResourceInterface
{

    /**
     * Creates a new User
     *
     * @Rest\Post("/create")
     * @param Request $request
     * @return View
     */
    public function createAction(Request $request)
    {
Run Code Online (Sandbox Code Playgroud)

然后,当我访问/api/user/create- 一切正常.