正确的做法(示例):
创建src/Controller/BarController.php
<?php
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
class BarController
{
public function index()
{
return new Response('<p>Bar controler response</p>');
}
}
和src/Controller/FooController.php
<?php
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
class FooController
{
public function index()
{
return new Response('<p>Foo controler response</p>');
}
}
创建config/routes/prefix-routes.yaml
index:
path: /
controller: App\Controller\DefaultController::index
bar:
path: /bar
controller: App\Controller\BarController::index
foo:
path: /foo
controller: App\Controller\FooController::index
并编辑路由config/routes.yaml - 删除其内容并放:
prefixed:
resource: "routes/prefix-routes.yaml"
prefix: service1
现在所有的控制器都可以在 urls 上使用:
http://localhost/service1/ for DefaultController.php
http://localhost/service1/bar for BarController.php
http://localhost/service1/foo for FooController.php
如果您希望您的分析器也使用 service1 前缀,那么请以这种方式编辑 config/routes/dev/web_profiler.yaml:
web_profiler_wdt:
resource: '@WebProfilerBundle/Resources/config/routing/wdt.xml'
prefix: service1/_wdt
web_profiler_profiler:
resource: '@WebProfilerBundle/Resources/config/routing/profiler.xml'
prefix: service1/_profiler
现在它们应该可以在:
http://localhost/service1/_wdt... for wdt
http://localhost/service1/_profiler for profiler
为注解添加前缀:
创建控制器src/Controller/AnnoController.php:
<?php
namespace App\Controller;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
class AnnoController extends AbstractController
{
/**
* @Route("/anno", name="anno")
*/
public function index()
{
return new Response('<p>Anno controler response</p>');
}
}
编辑config/routes/annotations.yaml并添加prefix: service1:
controllers:
resource: ../../src/Controller/
type: annotation
prefix: service1
kernel:
resource: ../../src/Kernel.php
type: annotation
现在前缀被添加到通过注释完成的路由中:
http://localhost/service1/anno for AnnoController.php
一些参考资料:
Symfony Routing Prefix
Symfony Routing Configuration Keys
添加前缀快速而肮脏的解决方法,为所有路由添加前缀service1(不推荐)。
无需像上面那样更改路由,只需编辑src/Kernel.phpprotected function configureRoutes
并通过在末尾添加 ->prefix('service1') 来更改每个 $routes->import 行,使其看起来像这样:
protected function configureRoutes(RoutingConfigurator $routes): void
{
$routes->import('../config/{routes}/'.$this->environment.'/*.yaml')->prefix('service1');
$routes->import('../config/{routes}/*.yaml')->prefix('service1');
if (is_file(\dirname(__DIR__).'/config/routes.yaml')) {
$routes->import('../config/{routes}.yaml')->prefix('service1');
} elseif (is_file($path = \dirname(__DIR__).'/config/routes.php')) {
(require $path)($routes->withPath($path), $this);
}
}
现在所有的控制器都可以在 urls 上使用:
http://localhost/service1/ for DefaultController.php
http://localhost/service1/bar for BarController.php
http://localhost/service1/foo for FooController.php
以及分析器:
http://localhost/service1/_wdt... for wdt
http://localhost/service1/_profiler for profiler