我无法在Symfony 4应用程序中找到有关全局路由前缀的任何信息。我发现的唯一thing是使用@route
注释控制器。但是我没有使用注释,我需要所有控制器都有相同的前缀。
现在我可以在app/config/routing.yml
文件中这样在S3中执行此操作:
app:
resource: '@AppBundle/Controller/'
type: annotation
prefix: /foo
但是S4是无捆绑的,我不能这样做 - 我必须创建一个我不需要的捆绑包。
是否可以在Symfony 4中定义全局路由前缀,或者我最终会为每个根添加前缀/创建自定义路由加载器,特别是如果我在YAML中配置路由?
答案 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 进行了测试,并且没有任何问题。