【发布时间】:2017-02-25 17:36:36
【问题描述】:
我已经开始为使用 Symfony 开发的应用程序实现控制器。这是我第一次尝试在该任务中同时使用 Symfony 和 PHP:我通常使用 Java,以及 JAX-RS 或 Spring。我关注了this tutorial。
我的测试类如下,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;
}
}
我希望只使用注释,所有路由都自动以“api”为前缀,这样客户端就可以使用/tags,而不是/api/tags。
是否可以定义一个自动添加到所有函数路由的通用前缀?阅读the documentation,我认为这个 Docblock 添加将是答案:
/**
* @Rest\Prefix("/api")
*/
class TagController extends FOSRestController
{
...
}
但是,this answer 对另一个问题似乎赋予了 @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。
【问题讨论】:
标签: php symfony fosrestbundle