ZetCode

Symfony 创建路由

最后修改于 2020 年 7 月 5 日

Symfony 创建路由教程展示了如何使用注解、XML、YAML 和 PHP 在 Symfony 中创建路由。

Symfony

Symfony 是一套可重用的 PHP 组件,也是一个用于 Web 项目的 PHP 框架。Symfony 于 2005 年发布为自由软件。Symfony 的最初作者是 Fabien Potencier。Symfony 深受 Spring Framework 的启发。

路由

路由是从 URL 路径到控制器的映射。例如,/about URL 被映射到 MyControllerabout() 方法。

Symfony 允许使用注解、XML、YAML 和 PHP 创建路由。

Symfony 创建路由示例

在下面的示例中,我们用不同的方式创建路由。

$ composer create-project symfony/skeleton createroutes

使用 composer,我们创建一个新的 Symfony 骨架项目。

$ cd createroutes

我们进入项目目录。

$ composer require maker
$ composer require annotations

我们安装两个模块:annotationsmaker

$ composer require server --dev

我们安装开发 Web 服务器。

$ php bin/console make:controller MyController

创建了一个 MyController

src/Controller/MyController.php
<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

class MyController extends AbstractController
{
    /**
     * @Route("/about", name="about")
     */
    public function about()
    {
        return new Response("This is About page", Response::HTTP_OK,
            ['content-type' => 'text/plain']);
    }

    public function index()
    {
        return new Response("This is Index page", Response::HTTP_OK,
            ['content-type' => 'text/plain']);
    }

    public function news()
    {
        return new Response("This is News page", Response::HTTP_OK,
            ['content-type' => 'text/plain']);
    }    

    public function contacts()
    {
        return new Response("This is Contacts page", Response::HTTP_OK,
            ['content-type' => 'text/plain']);
    }     
}

MyController 有四个路由,分别使用注解、XML、YAML 和 PHP 创建。每个路由都返回简单的文本。

/**
* @Route("/about", name="about")
*/
public function about()
{
    return new Response("This is About page", Response::HTTP_OK,
        ['content-type' => 'text/plain']);
}

about 路由使用 @Route 注解进行映射。

config/routes.yaml
index:
    path: /
    controller: App\Controller\MyController::index

index 路由在 YAML 配置文件中进行映射。

config/routes.xml
<?xml version="1.0" encoding="UTF-8" ?>
<routes xmlns="https://symfony.com.cn/schema/routing"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="https://symfony.com.cn/schema/routing
        https://symfony.com.cn/schema/routing/routing-1.0.xsd">

    <route id="contacts" controller="App\Controller\MyController::contacts" path="/contacts" >
    </route>
</routes>

contacts 路由在 XML 配置文件中进行映射。

config/routes.php
<?php

use App\Controller\MyController;
use Symfony\Component\Routing\Route;
use Symfony\Component\Routing\RouteCollection;

$routes = new RouteCollection();
$routes->add('news', new Route('/news', [
    '_controller' => [MyController::class, 'news']
]));

return $routes;

news 路由是使用 PHP 代码创建的。

$ php bin/console server:run

我们启动开发服务器。

$ curl localhost:8000/about
This is About page
$ curl localhost:8000/news
This is News page
$ curl localhost:8000/
This is Index page
$ curl localhost:8000/contacts
This is Contacts page

我们使用 curl 生成请求。

在本教程中,我们使用注解、XML、YAML 配置和 PHP 代码在 Symfony 中创建了路由。

列出 所有 Symfony 教程。