gpt4 book ai didi

php - Symfony2 包继承丢失父包路由

转载 作者:IT王子 更新时间:2023-10-29 01:22:11 25 4
gpt4 key购买 nike

我正在尝试按照 here 中的指示创建一个简单的包继承并遇到了路线问题。我正在使用注释进行路由。当我在 AppKernel.php 中注册我的子包时,我所有的父包路由都丢失了。

根据我从文档中了解到的内容,Symfony2 应该首先从子包中查看所有文件,包括路由,然后从父包中查看。现在这没有发生,似乎只加载了子包 Controller 。

在我的子包包文件中,我已经按照说明实现了 getParent 函数,在我的 routing.yml 中我有:

ParentBundle:
resource: "@Parent/Controller/"
type: annotation
prefix: /admin/

在继承之前运行良好。

我已经测试过,如果将所有 Controller 文件单独包含在 routing.yml 中,系统工作正常,但这似乎是使继承工作的非常麻烦的方法,因为我只想覆盖父包的几个部分(不是所有 Controller ).

Profiler 显示我的两个包都处于事件状态。

最佳答案

我找到了解决这个问题的正确方法。今天我还试图覆盖配置有注释路由的父包,并且还发现如果注释路由导入了整个包(“@SomeBundle/Controller”),父路由将被忽略。

经过一些调试后,我发现对此的解释是,如果您使用“@”作为 Controller 的前缀,这将传递给内核解析器,如果父资源已被覆盖,内核解析器将仅返回子资源。所以解决方案是提供包的完整路径,考虑到内核将尝试匹配来自 app/Resources 的资源,因此您将不得不添加一个相对目录 (../../) 在实际路径之前:

# app/config/routing.yml:
some_parent:
resource: "../../src/Application/ParentBundle/Controller"
type: annotation

# ChildBundle implements getParent() method to inherit from ParentBundle
some_child:
resource: "@ChildBundle/Controller"
type: annotation

这将按预期工作:所有父路由都将被导入并被子包中指定的所有路由覆盖。

关于php - Symfony2 包继承丢失父包路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9373433/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com