Symfony 4全局路由前缀

时间:2018-01-05 20:38:11

标签: php symfony symfony-routing symfony4

我无法在Symfony 4应用程序中找到有关全局路由前缀的任何信息。我发现的唯一thing是使用@route注释控制器。但是我没有使用注释,我需要所有控制器都有相同的前缀。

现在我可以在app/config/routing.yml文件中这样在S3中执行此操作:

app:
    resource: '@AppBundle/Controller/'
    type: annotation
    prefix: /foo

但是S4是无捆绑的,我不能这样做 - 我必须创建一个我不需要的捆绑包。

是否可以在Symfony 4中定义全局路由前缀,或者我最终会为每个根添加前缀/创建自定义路由加载器,特别是如果我在YAML中配置路由?

4 个答案:

答案 0 :(得分:4)

我可能不理解这个问题,因为我不知道你为什么要在你的应用中使用全局前缀。您可以在导入路由文件时设置前缀,即使您使用的是yaml也没有捆绑包。

# config/routes.yaml
blog:
    resource: '../src/Resources/config/routes/blog.yaml'
    prefix: blog

# src/Resources/config/routes/blog.yaml
blog_show:
    path: /show
    controller: App\Controller\BlogController::show

blog_list:
    path: /list
    controller: App\Controller\BlogController::list

bin / console debug:路由器将产生

blog_show          ANY      ANY      ANY    /blog/show     
blog_list          ANY      ANY      ANY    /blog/list  

但同样,我怀疑你是在寻求别的东西。也许您可以在问题中添加一个示例?

答案 1 :(得分:4)

带有注释,为每个控制器提供'this / prefix':

# file: config/routes/annotations.yaml

controllers:
    resource: ../../src/Controller/
    type: annotation
    prefix: this/prefix

然后对于导入的路由'this / prefix'应用于下面的所有FOSUserBundle路由(是的,我测试过它)。

# file: config/routes.yaml

fos_user:
    resource: "@FOSUserBundle/Resources/config/routing/all.xml"
    prefix: this/prefix

如果您没有使用注释,则应该能够导入单独的路由文件(可以导入更多),将前缀应用于资源中的所有内容。但删除“@”表示法并使用文件的相对路径。 'this / prefix'的值可以配置为服务容器参数,请查看此处:http://symfony.com/doc/current/routing/service_container_parameters.html

答案 2 :(得分:0)

我遇到了同样的问题,并且无法使用yaml配置解决它,但是我有它在类的顶部添加注释,如下所示:

/**
 *
 * Rest\Route("/api")
 */
class TestController extends FosRestController
{
   /**
     * @Rest\Route("/test", name="tm_test")
     * @Method({"GET"})
     */
    public function testAction()
    {
        ...
    }

}

这将为/api/test

生成路线testAction()

看这篇文章:https://symfony.com/blog/new-in-symfony-3-4-prefix-all-controller-route-names

希望有所帮助

答案 3 :(得分:0)

有几种方法可以实现任何路由的前缀。它们的不同主要是由于它们所针对的路由类型。

对于由注释定义的路线,您需要编辑config/routes/annotations.yaml 并放置prefix: your-prefix键值对。

对于YAML列表定义的路由,您需要编辑config/routes.yaml放在新路由prefix: your-prefix键值对和resource: "routes/routes-that-you-want-to-be-prefixed.yaml"下的routes/routes-that-you-want-to-be-prefixed.yaml拥有所有路由的config/routes.yaml会从resource: "routes/routes-that-you-want-to-be-prefixed.yaml"删除所有路由,除了使用src/Kernel.php的路由。

如果您急于想检查前缀,也可以使用快速而肮脏的方法。编辑$routes->import(..),并在所有->prefix('your-prefix)后加上const sig = Secp256k1.ecsign(priv, digest); function sign() { var txtOut = document.getElementById("txtOut"); txtOut = sig; } (无需更改任何路由文件)

我写了一个全面的描述,并附有一些示例代码示例,作为对该问题的解答: Running Symfony 5 with reverse proxy in subdirectory

示例代码段已经针对 Symfony 4.4 Symfony 5.1 进行了测试,并且没有任何问题。