亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
什么是 Symfony 路由組件?
安裝和配置
設(shè)置基本路由
參數(shù)以字符串形式提供。
RequestContext 對象" >初始化 RequestContext 對象
UrlMatcher 對象" >初始化 UrlMatcher 對象
如何匹配路由
從 YAML 文件加載路由
路由 YAML 文件
示例文件
一體化路由器
將路由創(chuàng)建為注釋:推薦方式
結(jié)論
首頁 后端開發(fā) php教程 使用Symfony路由組件在PHP應(yīng)用程序中設(shè)置路由

使用Symfony路由組件在PHP應(yīng)用程序中設(shè)置路由

Sep 03, 2023 pm 10:37 PM
php應(yīng)用程序 symfony路由組件 設(shè)置路由

使用Symfony路由組件在PHP應(yīng)用程序中設(shè)置路由

什么是 Symfony 路由組件?

Symfony 路由組件是一個非常流行的路由組件,它由多個框架改編而成,如果您希望在 PHP 應(yīng)用程序中設(shè)置路由,它可以提供很大的靈活性。

如果您已經(jīng)構(gòu)建了自定義 PHP 應(yīng)用程序并正在尋找功能豐富的路由庫,那么 Symfony 路由組件是最佳候選之一。它還允許您以 YAML 格式定義應(yīng)用程序的路由。

從安裝和配置開始,我們將通過實際示例來演示該組件用于路由配置的各種選項。在本文中,您將了解到:

  • Symfony 路由組件的安裝和配置
  • 如何設(shè)置基本路線
  • 如何從 YAML 文件加載路由
  • 將路由創(chuàng)建為注釋:推薦方式

安裝和配置

在本節(jié)中,我們將安裝在 PHP 應(yīng)用程序中設(shè)置路由所需的庫。我假設(shè)您已經(jīng)在系統(tǒng)中安裝了 Composer,因為我們需要它來安裝 Packagist 上提供的必要庫。

安裝 Composer 后,請繼續(xù)使用以下命令安裝核心路由組件。

$composer require symfony/routing

雖然路由組件本身足以在您的應(yīng)用程序中提供全面的路由功能,但我們還將繼續(xù)安裝一些其他組件,以使我們的生活更輕松并豐富現(xiàn)有的核心路由功能。

首先,我們將繼續(xù)安裝 HttpFoundation 組件,該組件為 PHP 全局變量和響應(yīng)相關(guān)函數(shù)提供面向?qū)ο蟮陌b器。它確保您不需要直接訪問 $_GET、$_POST 等全局變量。

$composer require symfony/http-foundation

接下來,如果您想在 YAML 文件而不是 PHP 代碼中定義應(yīng)用程序路由,則 YAML 組件可以發(fā)揮作用,因為它可以幫助您將 YAML 字符串轉(zhuǎn)換為 PHP 數(shù)組,反之亦然。

$composer require symfony/yaml

最后,我們將安裝 Config 組件,它提供了幾個實用程序類來初始化和處理不同類型文件(如 YAML、INI、XML 等)中定義的配置值。在我們的例子中,我們將使用它從 YAML 文件加載路由。

$composer require symfony/config

這就是安裝部分,但是你應(yīng)該如何使用它呢?事實上,只需將 Composer 創(chuàng)建的 autoload.php 文件包含在您的應(yīng)用程序中即可,如以下代碼片段所示。

<?php
require_once './vendor/autoload.php';
 
// application code
?>

設(shè)置基本路由

在上一節(jié)中,我們完成了必要的路由組件的安裝?,F(xiàn)在,您可以立即在 PHP 應(yīng)用程序中設(shè)置路由。

讓我們繼續(xù)創(chuàng)建包含以下內(nèi)容的 basic_routes.php 文件。

<?php
require_once './vendor/autoload.php';
 
use Symfony\Component\Routing\Matcher\UrlMatcher;
use Symfony\Component\Routing\RequestContext;
use Symfony\Component\Routing\RouteCollection;
use Symfony\Component\Routing\Route;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Generator\UrlGenerator;
use Symfony\Component\Routing\Exception\ResourceNotFoundException;
 
try
{
    // Init basic route
    $foo_route = new Route(
      '/foo',
      array('controller' => 'FooController')
    );
 
    // Init route with dynamic placeholders
    $foo_placeholder_route = new Route(
      '/foo/{id}',
      array('controller' => 'FooController', 'method'=>'load'),
      array('id' => '[0-9]+')
    );
 
    // Add Route object(s) to RouteCollection object
    $routes = new RouteCollection();
    $routes->add('foo_route', $foo_route);
    $routes->add('foo_placeholder_route', $foo_placeholder_route);
 
    // 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 '<pre class="brush:php;toolbar:false">';
    print_r($parameters);
 
    echo 'Generated URL: ' . $url;
    exit;
}
catch (ResourceNotFoundException $e)
{
  echo $e->getMessage();
}

使用 Symfony Routing 組件設(shè)置路由通常要經(jīng)歷如下列出的一系列步驟。

  • 為每個應(yīng)用程序路由初始化 Route 對象。
  • 將所有 Route 對象添加到 RouteCollection 對象添加到
  • 對象。
  • RequestContext初始化
  • 對象,該對象保存當前請求上下文信息。
  • RouteCollection 對象和 RequestContext 對象來初始化 UrlMatcher通過傳遞
  • 對象和
對象來初始化 UrlMatcher 對象。

初始化不同路由的路由對象foo

讓我們繼續(xù)定義一個非?;镜?

路由。Route

$foo_route = new Route(
  '/foo',
  array('controller' => 'FooController')
);

構(gòu)造函數(shù)的第一個參數(shù)是 URI 路徑,第二個參數(shù)是匹配此特定路由時要返回的自定義屬性數(shù)組。通常,它是控制器和方法的組合,當請求此路由時您要調(diào)用它們。

接下來我們看一下參數(shù)化路由。foo/1、foo/123 等類似的 URI。請注意,我們將 {id} 參數(shù)限制為僅限數(shù)字值,因此它不會匹配 foo/bar 這樣的 URI,因為 {id}

$foo_placeholder_route = new Route(
  '/foo/{id}',
  array('controller' => 'FooController', 'method'=>'load'),
  array('id' => '[0-9]+')
);

上述路由可以匹配

參數(shù)以字符串形式提供。

將所有路由對象添加到 RouteCollection 對象RouteCollection

下一步是將我們在上一節(jié)中初始化的路由對象添加到 ?? 對象。??
$routes = new RouteCollection();
$routes->add('foo_route', $foo_route);
$routes->add('foo_placeholder_route', $foo_placeholder_route);

正如您所看到的,這非常簡單,您只需要使用 RouteCollection 對象的 add 方法來添加路由對象。 add 方法的第一個參數(shù)是路由名稱,第二個參數(shù)是路由對象本身。

初始化 RequestContext 對象

接下來,我們需要初始化RequestContext對象,該對象保存當前請求上下文信息。當我們初始化 UrlMatcher 對象時,我們將需要這個對象,因為我們稍后會詳細介紹它。

$context = new RequestContext();
$context->fromRequest(Request::createFromGlobals());

初始化 UrlMatcher 對象

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

// Init UrlMatcher object
$matcher = new UrlMatcher($routes, $context);

現(xiàn)在,我們擁有了可以匹配路線的一切。

如何匹配路由

這是 UrlMatcher 對象的 match 方法,它允許您將任何路由與一組預(yù)定義路由進行匹配。

match 方法將 URI 作為其第一個參數(shù),并嘗試將其與預(yù)定義的路由進行匹配。如果找到該路由,它將返回與該路由關(guān)聯(lián)的自定義屬性。另一方面,如果沒有與當前 URI 關(guān)聯(lián)的路由,它會拋出 ResourceNotFoundException 異常。

$parameters = $matcher->match($context->getPathInfo());

在我們的例子中,我們通過從 $context 對象獲取當前 URI 來提供它。因此,如果您訪問 https://your-domain/basic_routes.php/foo URL,則 $context->getPathInfo() 返回 foo,并且我們已經(jīng)為 foo URI 定義了一條路由,因此它應(yīng)該返回以下內(nèi)容。

Array
(
    [controller] => FooController
    [_route] => foo_route
)

現(xiàn)在,讓我們繼續(xù)訪問 http://your-domain/basic_routes.php/foo/123 URL 來測試參數(shù)化路由。

Array
(
    [controller] => FooController
    [method] => load
    [id] => 123
    [_route] => foo_placeholder_route
)

如果您可以看到 id 參數(shù)與適當?shù)闹?123 綁定,則說明有效。

接下來,讓我們嘗試訪問不存在的路由,例如 http://your-domain/basic_routes.php/unknown-route,您應(yīng)該會看到以下消息。

No routes found for "/unknown-route".

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

除此之外,您還可以使用路由組件在應(yīng)用程序中生成鏈接。提供了 RouteCollectionRequestContext 對象,UrlGenerator 允許您為特定路由構(gòu)建鏈接。

$generator = new UrlGenerator($routes, $context);
$url = $generator->generate('foo_placeholder_route', array(
  'id' => 123,
));

generate 方法的第一個參數(shù)是路由名稱,第二個參數(shù)是數(shù)組,如果是參數(shù)化路由,則可以包含參數(shù)。上面的代碼應(yīng)該生成 /basic_routes.php/foo/123 URL。

從 YAML 文件加載路由

在上一節(jié)中,我們使用 RouteRouteCollection 對象構(gòu)建了自定義路由。事實上,路由組件提供了不同的方式供您選擇來實例化路由。您可以從各種加載器中進行選擇,例如 YamlFileLoader、XmlFileLoaderPhpFileLoader。

在本節(jié)中,我們將通過 YamlFileLoader 加載器來了解如何從 YAML 文件加載路由。

路由 YAML 文件

繼續(xù)創(chuàng)建包含以下內(nèi)容的 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]+'

示例文件

接下來,繼續(xù)使用以下內(nèi)容創(chuàng)建 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 本身中對其進行初始化。除此之外,一切都是相同的,并且應(yīng)該產(chǎn)生與 basic_routes.php 文件相同的結(jié)果。

一體化路由器

在本節(jié)中,我們將介紹 Router 類,它允許您使用更少的代碼行快速設(shè)置路由。

繼續(xù)制作包含以下內(nèi)容的 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();

將路由創(chuàng)建為注釋:推薦方式

在本節(jié)中,我們將討論如何實現(xiàn)基于注釋的路由。它正在成為在不同框架之間定義路由的最流行的方法之一。

在我們繼續(xù)實現(xiàn)基于注釋的路由之前,我們需要安裝幾個軟件包。讓我們快速完成此操作,如以下代碼片段所示。

$composer require symfony/framework-bundle
$composer require doctrine/annotations
$composer require doctrine/cache

如您所見,我們安裝了三個不同的組件。

在您的 composer.json 文件中,添加以下內(nèi)容:

"autoload": {
    "psr-4": {
        "App\\": "app/"
    }
}

現(xiàn)在,運行以下命令。

$composer dump-autoload

現(xiàn)在,我們準備好文件了。

繼續(xù)創(chuàng)建包含以下內(nèi)容的 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();

現(xiàn)在,讓我們在 src/Controller/FooController.php 中創(chuàng)建包含以下內(nèi)容的控制器文件。

<?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";
    }
}

您可能已經(jīng)注意到,我們以注釋的形式為每個方法定義了路由。這種方法的好處是,它允許您在與這些路由關(guān)聯(lián)的控制器的代碼旁邊定義路由。

繼續(xù)訪問 https://your-domain/index.php/ URL。根據(jù)以下路由配置,它應(yīng)該調(diào)用 index 方法。

/**
 * @Route("/",name="index")
 */

另一方面,如果您嘗試訪問 http://your-domain/index.php/hello URL,它應(yīng)該調(diào)用 DefaultController 控制器的 hello 方法類。

這就是基于注釋的路由的工作原理!

結(jié)論

繼續(xù)探索路由組件中可用的其他選項。

今天,我們探索了 Symfony 路由組件,它使得在 PHP 應(yīng)用程序中實現(xiàn)路由變得輕而易舉。在此過程中,我們創(chuàng)建了一些示例來演示路由組件的各個方面。

以上是使用Symfony路由組件在PHP應(yīng)用程序中設(shè)置路由的詳細內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權(quán)歸原作者所有,本站不承擔相應(yīng)法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
加速PHP應(yīng)用程序部署的秘密武器:Deployer 加速PHP應(yīng)用程序部署的秘密武器:Deployer Jul 12, 2023 am 10:22 AM

加速PHP應(yīng)用程序部署的秘密武器:Deployer一直以來,快速、高效地部署應(yīng)用程序一直是軟件開發(fā)團隊的重要任務(wù)之一。在PHP開發(fā)中,部署應(yīng)用程序通常涉及到上傳文件、更新代碼、配置環(huán)境等多個步驟。為了簡化和加速這一過程,現(xiàn)代化的開發(fā)工具和技術(shù)逐漸被引入,而其中一個被廣泛認可的秘密武器就是Deployer。Deployer是一個用于自動化應(yīng)用程序部署的PHP庫

如何使用Deployer部署PHP應(yīng)用程序 如何使用Deployer部署PHP應(yīng)用程序 Jul 12, 2023 pm 07:03 PM

如何使用Deployer部署PHP應(yīng)用程序在現(xiàn)代軟件開發(fā)過程中,自動化部署變得越來越重要。Deployer是一個簡單而強大的PHP部署工具,它可以幫助我們輕松地部署PHP應(yīng)用程序。本文將介紹如何使用Deployer來部署PHP應(yīng)用程序,并提供一些代碼示例。一、安裝Deployer首先,我們需要通過Composer來安裝Deployer。在命令行中運行以下命令

如何使用Memcache提升PHP應(yīng)用程序的性能和可用性? 如何使用Memcache提升PHP應(yīng)用程序的性能和可用性? Nov 08, 2023 pm 09:57 PM

如何使用Memcache提升PHP應(yīng)用程序的性能和可用性?引言:隨著互聯(lián)網(wǎng)應(yīng)用程序的迅速發(fā)展和用戶訪問量的增加,提高應(yīng)用程序的性能和可用性成為了開發(fā)者亟需解決的問題之一。其中,使用緩存是一種常見的優(yōu)化手段。 Memcache是一種常用的緩存技術(shù),可以顯著提升應(yīng)用程序的性能和可用性。本文將介紹如何在PHP應(yīng)用程序中使用Memcache,并給出具體的代碼示例。安裝

使用Symfony路由組件在PHP應(yīng)用程序中設(shè)置路由 使用Symfony路由組件在PHP應(yīng)用程序中設(shè)置路由 Sep 03, 2023 pm 10:37 PM

什么是Symfony路由組件?Symfony路由組件是一個非常流行的路由組件,它由多個框架改編而成,如果您希望在PHP應(yīng)用程序中設(shè)置路由,它可以提供很大的靈活性。如果您已經(jīng)構(gòu)建了自定義PHP應(yīng)用程序并正在尋找功能豐富的路由庫,那么Symfony路由組件是最佳候選之一。它還允許您以YAML格式定義應(yīng)用程序的路由。從安裝和配置開始,我們將通過實際示例來演示該組件用于路由配置的各種選項。在本文中,您將了解到:Symfony路由組件的安裝和配置如何設(shè)置基本路線如何從YAML文件加載路由將路由創(chuàng)建為注釋:

高效批量部署PHP應(yīng)用程序:使用Deployer 高效批量部署PHP應(yīng)用程序:使用Deployer Jul 12, 2023 am 08:36 AM

高效批量部署PHP應(yīng)用程序:使用Deployer引言:隨著云計算、容器化和微服務(wù)架構(gòu)的興起,現(xiàn)代應(yīng)用程序的部署已經(jīng)越來越復(fù)雜和繁瑣。尤其是在開發(fā)團隊需要頻繁部署多個PHP應(yīng)用程序的情況下,手動部署每個應(yīng)用程序是非常耗時且容易出錯的。為了解決這個問題,我們可以使用Deployer工具來自動化和簡化PHP應(yīng)用程序的部署過程。在本文中,我們將介紹Deployer的

安全測試工具對PHP應(yīng)用程序的應(yīng)用 安全測試工具對PHP應(yīng)用程序的應(yīng)用 Aug 07, 2023 pm 07:36 PM

安全測試工具對PHP應(yīng)用程序的應(yīng)用隨著互聯(lián)網(wǎng)的發(fā)展,PHP應(yīng)用程序在網(wǎng)絡(luò)中的使用越來越普遍。然而,隨之而來的安全威脅也日益增加。為了確保PHP應(yīng)用程序的安全性,開發(fā)人員需要進行有效的安全測試。本文將介紹一些常用的安全測試工具,并提供相關(guān)的代碼示例,以幫助開發(fā)人員更好地保護他們的應(yīng)用程序。靜態(tài)代碼分析工具靜態(tài)代碼分析工具可以通過檢查源代碼中的潛在漏洞,并給出相

如何通過緩存技術(shù)優(yōu)化PHP應(yīng)用程序響應(yīng)時間? 如何通過緩存技術(shù)優(yōu)化PHP應(yīng)用程序響應(yīng)時間? Jun 20, 2023 pm 12:12 PM

近年來,隨著Web應(yīng)用程序越來越復(fù)雜,如何優(yōu)化Web應(yīng)用程序的響應(yīng)時間成為了一個熱門話題。其中,緩存技術(shù)是優(yōu)化響應(yīng)時間的一個重要手段。在本文中,我們將詳細介紹如何通過緩存技術(shù)優(yōu)化PHP應(yīng)用程序響應(yīng)時間。一、為什么需要緩存?當用戶訪問Web應(yīng)用程序時,Web服務(wù)器會將PHP腳本解析成HTML代碼,并返回給用戶的瀏覽器。然而,如果PHP腳本非常復(fù)雜,在返回HTM

如何防止文件上傳漏洞在PHP應(yīng)用程序中的利用 如何防止文件上傳漏洞在PHP應(yīng)用程序中的利用 Jul 05, 2023 pm 01:31 PM

如何防止文件上傳漏洞在PHP應(yīng)用程序中的利用引言:在現(xiàn)代Web應(yīng)用程序中,文件上傳功能是一項常見的需求。然而,如果未正確地實施和驗證,文件上傳功能可能會成為黑客攻擊的入口點,導(dǎo)致嚴重的安全漏洞。本文將介紹如何在PHP應(yīng)用程序中防止文件上傳漏洞的利用,并提供一些代碼示例來幫助您加強應(yīng)用程序的安全性。一、文件上傳漏洞的原理文件上傳漏洞的原理是攻擊者利用漏洞點,上

See all articles