目次
Symfony ルーティング コンポーネントとは何ですか?
インストールと構成
基本的なルーティングを設定する
さまざまなルートのルーティング オブジェクトを初期化する
RequestContext 对象" >初始化 RequestContext 对象
UrlMatcher 对象" >初始化 UrlMatcher 对象
如何匹配路由
从 YAML 文件加载路由
路由 YAML 文件
示例文件
一体化路由器
将路由创建为注释:推荐方式
结论
ホームページ バックエンド開発 PHPチュートリアル Symfony ルーティング コンポーネントを使用して PHP アプリケーションでルーティングを設定する

Symfony ルーティング コンポーネントを使用して PHP アプリケーションでルーティングを設定する

Sep 03, 2023 pm 10:37 PM
PHPアプリケーション symfony ルーティングコンポーネント ルーティングを設定する

Symfony ルーティング コンポーネントを使用して PHP アプリケーションでルーティングを設定する

Symfony ルーティング コンポーネントとは何ですか?

Symfony ルーティング コンポーネントは、いくつかのフレームワークから適応された非常に人気のあるルーティング コンポーネントであり、PHP アプリケーションでルーティングを設定する場合に高い柔軟性を提供します。

カスタム PHP アプリケーションを構築していて、機能豊富なルーティング ライブラリを探している場合、Symfony Routing Component が最良の候補の 1 つです。また、アプリケーションのルートを YAML 形式で定義することもできます。

インストールと構成から始めて、実際の例を通じてルーティング構成のためのこのコンポーネントのさまざまなオプションを示します。この記事では次のことを学びます:

  • Symfony ルーティングコンポーネントのインストールと構成
  • 基本ルートの設定方法
  • YAML ファイルからルートを読み込む方法
  • コメントとしてルートを作成: 推奨される方法

インストールと構成

このセクションでは、PHP アプリケーションでルーティングを設定するために必要なライブラリをインストールします。 Packagist で利用可能な必要なライブラリをインストールするには Composer が必要なので、すでにシステムに Composer がインストールされていると思います。

Composer をインストールした後、引き続き次のコマンドを使用してコア ルーティング コンポーネントをインストールしてください。

リーリー

ルーティング コンポーネント自体は、アプリケーションに包括的なルーティング機能を提供するのに十分ですが、作業を容易にし、既存のコア ルーティング機能を充実させるために、いくつかの追加コンポーネントもインストールします。

まず、HttpFoundation コンポーネントのインストールに進みます。このコンポーネントは、PHP グローバル変数と応答関連関数のオブジェクト指向ラッパーを提供します。これにより、$_GET$_POST などのグローバル変数に直接アクセスする必要がなくなります。

リーリー

次に、PHP コードではなく YAML ファイルでアプリケーション ルートを定義する場合は、YAML 文字列と PHP 配列、またはその逆の変換に役立つ YAML コンポーネントが役に立ちます。

リーリー

最後に、Config コンポーネントをインストールします。このコンポーネントは、さまざまな種類のファイル (YAML、INI、XML など) で定義された構成値を初期化および処理するためのいくつかのユーティリティ クラスを提供します。この例では、これを使用して YAML ファイルからルートを読み込みます。

リーリー

これはインストール部分ですが、どのように使用するのでしょうか?実際には、次のコード スニペットに示すように、Composer によって作成された autoload.php ファイルをアプリケーションに含めるだけです。

リーリー

基本的なルーティングを設定する

前のセクションでは、必要なルーティング コンポーネントのインストールを完了しました。これで、PHP アプリケーションでルーティングを即座に設定できるようになりました。

次に、次の内容を含む basic_routes.php ファイルを作成しましょう。

リーリー

Symfony Routing コンポーネントを使用してルーティングを設定するには、通常、以下に示す一連の手順が必要です。

  • 各アプリケーション ルートの Route オブジェクトを初期化します。
  • すべての Route オブジェクトを RouteCollection オブジェクトに追加します。
  • 現在のリクエスト コンテキスト情報を保存する RequestContext オブジェクトを初期化します。
  • RouteCollection オブジェクトと RequestContext オブジェクトを渡して、UrlMatcher オブジェクトを初期化します。

さまざまなルートのルーティング オブジェクトを初期化する

非常に基本的な foo ルートを定義してみましょう。

リーリー

Route コンストラクターの最初のパラメーターは URI パスで、2 番目のパラメーターは、この特定のルートと一致するときに返されるカスタム プロパティの配列です。通常、このルートが要求されたときに呼び出すコントローラーとメソッドの組み合わせです。

次に、パラメータ化されたルーティングを見てみましょう。

リーリー

上記のルートは、foo/1foo/123、およびその他の同様の URI と一致します。 {id} パラメータは数値のみに制限されているため、{id} パラメータが提供されているため、foo/bar のような URI には一致しないことに注意してください。文字列として。

すべてのルーティング オブジェクトを RouteCollection オブジェクトに追加します。

次のステップでは、前のセクションで初期化したルート オブジェクトを

RouteCollection オブジェクトに追加します。

$routes = new RouteCollection();
$routes->add('foo_route', $foo_route);
$routes->add('foo_placeholder_route', $foo_placeholder_route);
ログイン後にコピー

正如您所看到的,这非常简单,您只需要使用 RouteCollection 对象的 add 方法来添加路由对象。 add 方法的第一个参数是路由名称,第二个参数是路由对象本身。

初始化 RequestContext 对象

接下来,我们需要初始化RequestContext对象,该对象保存当前请求上下文信息。当我们初始化 UrlMatcher 对象时,我们将需要这个对象,因为我们稍后会详细介绍它。

$context = new RequestContext();
$context->fromRequest(Request::createFromGlobals());
ログイン後にコピー

初始化 UrlMatcher 对象

最后,我们需要初始化 UrlMatcher 对象以及路由和上下文信息。

// Init UrlMatcher object
$matcher = new UrlMatcher($routes, $context);
ログイン後にコピー

现在,我们拥有了可以匹配路线的一切。

如何匹配路由

这是 UrlMatcher 对象的 match 方法,它允许您将任何路由与一组预定义路由进行匹配。

match 方法将 URI 作为其第一个参数,并尝试将其与预定义的路由进行匹配。如果找到该路由,它将返回与该路由关联的自定义属性。另一方面,如果没有与当前 URI 关联的路由,它会抛出 ResourceNotFoundException 异常。

$parameters = $matcher->match($context->getPathInfo());
ログイン後にコピー

在我们的例子中,我们通过从 $context 对象获取当前 URI 来提供它。因此,如果您访问 https://your-domain/basic_routes.php/foo URL,则 $context->getPathInfo() 返回 foo,并且我们已经为 foo URI 定义了一条路由,因此它应该返回以下内容。

Array
(
    [controller] => FooController
    [_route] => foo_route
)
ログイン後にコピー

现在,让我们继续访问 http://your-domain/basic_routes.php/foo/123 URL 来测试参数化路由。

Array
(
    [controller] => FooController
    [method] => load
    [id] => 123
    [_route] => foo_placeholder_route
)
ログイン後にコピー

如果您可以看到 id 参数与适当的值 123 绑定,则说明有效。

接下来,让我们尝试访问不存在的路由,例如 http://your-domain/basic_routes.php/unknown-route,您应该会看到以下消息。

No routes found for "/unknown-route".
ログイン後にコピー

这就是如何使用 match 方法查找路由。

除此之外,您还可以使用路由组件在应用程序中生成链接。提供了 RouteCollectionRequestContext 对象,UrlGenerator 允许您为特定路由构建链接。

$generator = new UrlGenerator($routes, $context);
$url = $generator->generate('foo_placeholder_route', array(
  'id' => 123,
));
ログイン後にコピー

generate 方法的第一个参数是路由名称,第二个参数是数组,如果是参数化路由,则可以包含参数。上面的代码应该生成 /basic_routes.php/foo/123 URL。

从 YAML 文件加载路由

在上一节中,我们使用 RouteRouteCollection 对象构建了自定义路由。事实上,路由组件提供了不同的方式供您选择来实例化路由。您可以从各种加载器中进行选择,例如 YamlFileLoaderXmlFileLoaderPhpFileLoader

在本节中,我们将通过 YamlFileLoader 加载器来了解如何从 YAML 文件加载路由。

路由 YAML 文件

继续创建包含以下内容的 routes.yaml 文件。

foo_route:
    path:     /foo
    controller: App\Controller\FooController::index
    methods:    GET
 
foo_placeholder_route:
    path:     /foo/{id}
    controller: App\Controller\FooController::load
    methods:    GET
    requirements:
        id: '[0-9]+'
ログイン後にコピー

示例文件

接下来,继续使用以下内容创建 load_routes_from_yaml.php 文件。

load('routes.yaml');
 
    // Init RequestContext object
    $context = new RequestContext();
    $context->fromRequest(Request::createFromGlobals());
 
    // Init UrlMatcher object
    $matcher = new UrlMatcher($routes, $context);
 
    // Find the current route
    $parameters = $matcher->match($context->getPathInfo());
 
    // How to generate a SEO URL
    $generator = new UrlGenerator($routes, $context);
    $url = $generator->generate('foo_placeholder_route', array(
      'id' => 123,
    ));
 
    echo '
';
    print_r($parameters);
 
    echo 'Generated URL: ' . $url;
    exit;
}
catch (ResourceNotFoundException $e)
{
  echo $e->getMessage();
}
ログイン後にコピー

在这种情况下唯一不同的是我们初始化路由的方式!

$fileLocator = new FileLocator(array(__DIR__));
$loader = new YamlFileLoader($fileLocator);
$routes = $loader->load('routes.yaml');
ログイン後にコピー

我们使用 YamlFileLoader 加载器从 routes.yaml 文件加载路由,而不是直接在 PHP 本身中对其进行初始化。除此之外,一切都是相同的,并且应该产生与 basic_routes.php 文件相同的结果。

一体化路由器

在本节中,我们将介绍 Router 类,它允许您使用更少的代码行快速设置路由。

继续制作包含以下内容的 all_in_one_router.php 文件。

<?php
require_once './vendor/autoload.php';
 
use Symfony\Component\Routing\RequestContext;
use Symfony\Component\Routing\Router;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Generator\UrlGenerator;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\Routing\Loader\YamlFileLoader;
use Symfony\Component\Routing\Exception\ResourceNotFoundException;
 
try
{
    $fileLocator = new FileLocator(array(__DIR__));
 
    $requestContext = new RequestContext();
    $requestContext->fromRequest(Request::createFromGlobals());
 
    $router = new Router(
        new YamlFileLoader($fileLocator),
        'routes.yaml',
        array('cache_dir' => __DIR__.'/cache'),
        $requestContext
    );
 
    // Find the current route
    $parameters = $router->match($requestContext->getPathInfo());
 
    // How to generate a SEO URL
    $routes = $router->getRouteCollection();
    $generator = new UrlGenerator($routes, $requestContext);
    $url = $generator->generate('foo_placeholder_route', array(
      'id' => 123,
    ));
 
    echo '<pre class="brush:php;toolbar:false">';
    print_r($parameters);
 
    echo 'Generated URL: ' . $url;
    exit;
}
catch (ResourceNotFoundException $e)
{
  echo $e->getMessage();
}
ログイン後にコピー

一切都几乎相同,除了我们实例化了 Router 对象以及必要的依赖项。

$router = new Router(
    new YamlFileLoader($fileLocator),
    'routes.yaml',
    array('cache_dir' => __DIR__.'/cache'),
    $requestContext
);
ログイン後にコピー

完成后,您可以立即使用 Router 对象的 match 方法进行路由映射。

$parameters = $router->match($requestContext->getPathInfo());
ログイン後にコピー

此外,您还需要使用 Router 对象的 getRouteCollection 方法来获取路由。

$routes = $router->getRouteCollection();
ログイン後にコピー

将路由创建为注释:推荐方式

在本节中,我们将讨论如何实现基于注释的路由。它正在成为在不同框架之间定义路由的最流行的方法之一。

在我们继续实现基于注释的路由之前,我们需要安装几个软件包。让我们快速完成此操作,如以下代码片段所示。

$composer require symfony/framework-bundle
$composer require doctrine/annotations
$composer require doctrine/cache
ログイン後にコピー

如您所见,我们安装了三个不同的组件。

在您的 composer.json 文件中,添加以下内容:

"autoload": {
    "psr-4": {
        "App\\": "app/"
    }
}
ログイン後にコピー

现在,运行以下命令。

$composer dump-autoload
ログイン後にコピー

现在,我们准备好文件了。

继续创建包含以下内容的 index.php 文件。

load(__DIR__ . '/src/Controller/');
$context = new RequestContext();
$context->fromRequest(Request::createFromGlobals());

$matcher = new UrlMatcher($routes, $context);
$parameters = $matcher->match($context->getPathInfo());

$controllerInfo = explode('::',$parameters['_controller']);

$controller = new $controllerInfo[0];
$action = $controllerInfo[1];

$controller->$action();
ログイン後にコピー

现在,让我们在 src/Controller/FooController.php 中创建包含以下内容的控制器文件。

<?php
namespace App\Controller;

use Symfony\Component\Routing\Annotation\Route;

class DefaultController
{
    /**
     * @Route("/",name="index")
     */
    public function index()
    {
        echo "Index action";
    }

    /**
     * @Route("/hello",name="hello")
     */
    public function hello()
    {
        echo "Hello action";
    }
}
ログイン後にコピー

您可能已经注意到,我们以注释的形式为每个方法定义了路由。这种方法的好处是,它允许您在与这些路由关联的控制器的代码旁边定义路由。

继续访问 https://your-domain/index.php/ URL。根据以下路由配置,它应该调用 index 方法。

/**
 * @Route("/",name="index")
 */
ログイン後にコピー

另一方面,如果您尝试访问 http://your-domain/index.php/hello URL,它应该调用 DefaultController 控制器的 hello 方法类。

这就是基于注释的路由的工作原理!

结论

继续探索路由组件中可用的其他选项。

今天,我们探索了 Symfony 路由组件,它使得在 PHP 应用程序中实现路由变得轻而易举。在此过程中,我们创建了一些示例来演示路由组件的各个方面。

以上がSymfony ルーティング コンポーネントを使用して PHP アプリケーションでルーティングを設定するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHP アプリケーションのデプロイメントを高速化する秘密兵器: Deployer PHP アプリケーションのデプロイメントを高速化する秘密兵器: Deployer Jul 12, 2023 am 10:22 AM

PHP アプリケーションの展開を加速する秘密兵器: デプロイヤー アプリケーションの迅速かつ効率的な展開は、常にソフトウェア開発チームの重要なタスクの 1 つです。 PHP 開発では、通常、アプリケーションのデプロイには、ファイルのアップロード、コードの更新、環境の構成などの複数の手順が含まれます。このプロセスを簡素化し、加速するために、最新の開発ツールとテクノロジが徐々に導入されており、広く認識されている秘密兵器の 1 つが Deployer です。 Deployer は、アプリケーションを自動デプロイするための PHP ライブラリです。

Deployer を使用して PHP アプリケーションをデプロイする方法 Deployer を使用して PHP アプリケーションをデプロイする方法 Jul 12, 2023 pm 07:03 PM

Deployer を使用して PHP アプリケーションをデプロイする方法 最新のソフトウェア開発プロセスでは、自動デプロイメントの重要性がますます高まっています。 Deployer は、PHP アプリケーションを簡単にデプロイするのに役立つ、シンプルで強力な PHP デプロイメント ツールです。この記事では、Deployer を使用して PHP アプリケーションをデプロイする方法を紹介し、いくつかのコード例を示します。 1. Deployer をインストールする まず、Composer を介して Deployer をインストールする必要があります。コマンドラインで次のコマンドを実行します

Symfony ルーティング コンポーネントを使用して PHP アプリケーションでルーティングを設定する Symfony ルーティング コンポーネントを使用して PHP アプリケーションでルーティングを設定する Sep 03, 2023 pm 10:37 PM

Symfony ルーティング コンポーネントとは何ですか? symfony ルーティング コンポーネントは、いくつかのフレームワークを基にした非常に人気のあるルーティング コンポーネントであり、PHP アプリケーションでルーティングを設定する場合に高い柔軟性を提供します。カスタム PHP アプリケーションを構築していて、機能豊富なルーティング ライブラリを探している場合、Symfony Routing Component が最良の候補の 1 つです。また、アプリケーションのルートを YAML 形式で定義することもできます。インストールと構成から始めて、このコンポーネントがルーティング構成に持つさまざまなオプションを実際の例を通して示します。この記事では、次のことを学びます: Symfony ルーティング コンポーネントのインストールと設定 基本的なルートを設定する方法 YAML ファイルからルートをロードする方法 アノテーションとしてルートを作成する:

Memcache を使用して PHP アプリケーションのパフォーマンスと可用性を向上させるにはどうすればよいですか? Memcache を使用して PHP アプリケーションのパフォーマンスと可用性を向上させるにはどうすればよいですか? Nov 08, 2023 pm 09:57 PM

Memcache を使用して PHP アプリケーションのパフォーマンスと可用性を向上させるにはどうすればよいですか?はじめに: インターネット アプリケーションの急速な発展とユーザーの訪問数の増加に伴い、アプリケーションのパフォーマンスと可用性の向上は、開発者が緊急に解決する必要がある問題の 1 つとなっています。その中でもキャッシュを利用するのが一般的な最適化手法です。 Memcache は、アプリケーションのパフォーマンスと可用性を大幅に向上させる、一般的に使用されるキャッシュ テクノロジです。この記事では、PHP アプリケーションで Memcache を使用する方法と具体的なコード例を紹介します。インストール

PHP アプリケーションの効率的なバッチ デプロイメント: Deployer の使用 PHP アプリケーションの効率的なバッチ デプロイメント: Deployer の使用 Jul 12, 2023 am 08:36 AM

PHP アプリケーションの効率的なバッチ デプロイメント: Deployer の使用 はじめに: クラウド コンピューティング、コンテナ化、マイクロサービス アーキテクチャの台頭により、最新のアプリケーションのデプロイメントはますます複雑かつ煩雑になってきています。特に、開発チームが複数の PHP アプリケーションを頻繁にデプロイする必要がある状況では、各アプリケーションを手動でデプロイすると時間がかかり、エラーが発生しやすくなります。この問題を解決するには、Deployer ツールを使用して、PHP アプリケーションの展開プロセスを自動化および簡素化できます。この記事ではDeployerについて紹介します。

PHP アプリケーションへのセキュリティ テスト ツールの適用 PHP アプリケーションへのセキュリティ テスト ツールの適用 Aug 07, 2023 pm 07:36 PM

PHP アプリケーションへのセキュリティ テスト ツールの適用 インターネットの発展に伴い、ネットワーク内で PHP アプリケーションを使用することがますます一般的になってきています。しかし、セキュリティ上の脅威も増大しています。 PHP アプリケーションのセキュリティを確保するには、開発者は効果的なセキュリティ テストを実施する必要があります。この記事では、一般的に使用されるいくつかのセキュリティ テスト ツールを紹介し、開発者がアプリケーションをより適切に保護できるように関連するコード例を示します。静的コード分析ツール 静的コード分析ツールは、ソース コードの潜在的な脆弱性をチェックし、関連する情報を提供します。

キャッシュ テクノロジを通じて PHP アプリケーションの応答時間を最適化するにはどうすればよいですか? キャッシュ テクノロジを通じて PHP アプリケーションの応答時間を最適化するにはどうすればよいですか? Jun 20, 2023 pm 12:12 PM

近年、Web アプリケーションの複雑化に伴い、Web アプリケーションの応答時間をいかに最適化するかが大きな話題となっています。中でも、キャッシュ技術は応答時間を最適化するための重要な手段です。この記事では、キャッシュ テクノロジを通じて PHP アプリケーションの応答時間を最適化する方法について詳しく説明します。 1. キャッシュはなぜ必要なのでしょうか?ユーザーが Web アプリケーションにアクセスすると、Web サーバーは PHP スクリプトを HTML コードに解析し、それをユーザーのブラウザーに返します。ただし、PHP スクリプトが非常に複雑な場合は、HTM を返す前に

Memcached キャッシュが PHP アプリケーションを最適化する方法についてのディスカッション Memcached キャッシュが PHP アプリケーションを最適化する方法についてのディスカッション Jun 20, 2023 am 08:43 AM

Memcached は、Web アプリケーションのキャッシュで広く使用されている、オープンソースで展開が簡単な軽量の分散キャッシュ システムです。これを使用すると、大規模な Web アプリケーションでよく使用されるデータベース アクセスのボトルネックを解決しながら、アプリケーションのパフォーマンスを向上させることができます。この記事では、Memcached を使用して PHP アプリケーションのキャッシュを最適化する方法について説明します。キャッシュの使用 キャッシュを使用すると、Web アプリケーションでのデータベースへのクエリの数を効果的に減らすことができます。クエリ結果がすでに存在する場合

See all articles