如何在Symfony 4中为多个路由添加前缀

4
我希望所有位于“App\Controller\Api”命名空间中的控制器动作路由都以前缀“/api”开头。我还希望在控制器内部使用注释来设置其余的路由。 在Symfony 3中,可以通过编辑“config/routing.yml”文件来实现上述需求。
app:
    resource: '@AppBundle/Controller/Api'
    type: annotation
    prefix: /api

我该如何在Symfony 4中实现这个?我需要创建一个bundle吗?由于我没有'config/routing.yml'文件,我应该使用哪个配置文件?

你仍然可以在没有bundle的情况下导入路由并设置前缀。https://dev59.com/vKjja4cB1Zd3GeqP4AGw#48121299 - Cerad
我看到了那个页面。我不明白“Resources”是从哪里来的,或者在我的“config/routes.yaml”中需要什么。我使用“composer create-project symfony/skeleton my-project”开始了我的项目。 - ken
在这种情况下实际上不需要一个资源目录。只需创建一个config/routes_api.yaml文件并导入它即可。而你提供的4.1链接适用于路由名称而非路由本身,因此不适用。 - Cerad
@Cerad 我忘了提到我想要使用注释来构建路由缓存。config/routes_api.yaml是否意味着包含路由? - ken
2个回答

9

好的,看起来我应该只是尝试了真实路径名。以下内容在 'config/routes.yaml' 中有效:

api:
    prefix: /api
    resource: '../src/Controller/Api'

值得一提的是,如果您使用注释,您可能还需要在此处添加 type: annotation,否则可能会出现 Cannot load resource "../src/Controller/Api" 错误。 - Daniel Stasiak
我需要为同一个控制器添加前缀v1和前缀''。 你能帮我吗? - Jeferson Guedes

3

首先运行composer require annotations,然后执行以下操作:

use Symfony\Component\Routing\Annotation\Route;

/**
* @Route("/blog")
*/
class BlogController extends Controller
{

}

2
这是一个很好的例子,但它只展示了如何使用yaml文件创建单个路由。我想使用配置文件来设置特定命名空间中许多控制器的前缀,并使用注释来设置其余的路由。 - ken
1
这确实可以工作,但是我不得不为每个需要的路由控制器手动输入@Route('/api')。我甚至尝试了使用前缀扩展类,但它并没有继承下来。 - ken

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接