📅  最后修改于: 2023-12-03 14:47:49.181000             🧑  作者: Mango
Symfony 路由组件是一个独立的组件,它允许你将 URL 映射到应用程序中的控制器和操作等。它支持各种类型的路由,包括基于正则表达式,基于 XML 配置文件和 YAML 配置文件的路由。
使用 Composer 安装 Symfony 路由组件:
composer require symfony/routing
以下是一个简单的示例,说明如何将 URL 映射到控制器方法:
use Symfony\Component\Routing\Route;
use Symfony\Component\Routing\RouteCollection;
$route = new Route('/hello/{name}', ['_controller' => 'App\\Controller\\HelloController::index']);
$routes = new RouteCollection();
$routes->add('hello', $route);
在上面的代码中,我们创建了一个名为 hello
的路由,将 /hello/{name}
映射到 App\Controller\HelloController::index
控制器方法。
路由可以包含参数,这些参数由大括号括起来。例如,路由为 /product/{id}
将匹配任何以 /product/
开头并且具有一个 ID 参数的 URL。参数名称是大括号中的名称,如 {id}
。
$route = new Route('/product/{id}', ['_controller' => 'App\\Controller\\ProductController::show']);
$routes->add('product_show', $route);
你可以在控制器操作中访问参数,可以通过以下方式访问它:
public function show($id)
{
// ...
}
有时,URL 的一部分是可选的,这可以通过在参数名称后跟一个问号(?
)来实现。
例如,路由为 /blog/{slug}?{page}
将匹配任何 URL,以 /blog/
开头,并带有可选的 page
参数。
$route = new Route('/blog/{slug}', ['_controller' => 'App\\Controller\\BlogController::show']);
$route->setDefaults(['page' => 1]);
$route->setRequirement('page', '\d+');
$routes->add('blog_show', $route);
在上面的示例中,我们设置了一个名为 page
的默认值为 1
的可选参数。我们还通过 setRequirement()
方法来限制 page
参数只能是数字。
Symfony 路由组件还允许你将参数传递给路由并生成对应的 URL。
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
$urlGenerator = new UrlGenerator($routes, new RequestContext());
$url = $urlGenerator->generate('blog_show', ['slug' => 'my-blog-post', 'page' => 2]);
上面的示例将生成一个 URL,它将匹配以 /blog/my-blog-post
开头,并设置参数 page
为 2
。
你可以使用 RouteCollection 类来组织路由。
use Symfony\Component\Routing\RouteCollection;
$blogRoutes = new RouteCollection();
$blogRoutes->add('show', new Route('/{slug}'));
$blogRoutes->add('edit', new Route('/{slug}/edit'));
$adminRoutes = new RouteCollection();
$adminRoutes->addPrefix('/admin');
$adminRoutes->addCollection($blogRoutes);
$routes->addCollection($adminRoutes);
在上面的示例中,我们创建了两个路由,show
和 edit
,它们都位于 /blog/{slug}
路径下。我们还创建了一个路由组 admin
,它包含 /admin/blog/{slug}
路径和所有 blog
路由。最后,我们将 admin
路由组添加到根路由组中。
Symfony 路由组件为构建灵活的路由系统提供了强大的工具。使用 Symfony 路由组件,你可以轻松地映射 URL 到控制器操作,并生成相应的链接。