


Richten Sie Routing in PHP-Anwendungen mit der Symfony-Routing-Komponente ein
Was ist die Symfony-Routing-Komponente?
Die Symfony-Routing-Komponente ist eine sehr beliebte Routing-Komponente, die aus mehreren Frameworks übernommen wurde und viel Flexibilität bietet, wenn Sie Routing in Ihrer PHP-Anwendung einrichten möchten.
Wenn Sie eine benutzerdefinierte PHP-Anwendung erstellt haben und nach einer funktionsreichen Routing-Bibliothek suchen, dann ist Symfony Routing Component einer der besten Kandidaten. Außerdem können Sie die Routen Ihrer Anwendung im YAML-Format definieren.
Beginnend mit der Installation und Konfiguration zeigen wir anhand praktischer Beispiele, welche vielfältigen Möglichkeiten diese Komponente zur Routing-Konfiguration bietet. In diesem Artikel erfahren Sie mehr über:
- Installation und Konfiguration der Symfony-Routing-Komponente
- So richten Sie eine einfache Route ein
- So laden Sie Routen aus einer YAML-Datei
- Routen als Kommentare erstellen: Empfohlener Weg
Installation und Konfiguration
In diesem Abschnitt installieren wir die Bibliotheken, die zum Einrichten des Routings in PHP-Anwendungen erforderlich sind. Ich gehe davon aus, dass Sie Composer bereits auf Ihrem System installiert haben, da wir es benötigen, um die erforderlichen Bibliotheken zu installieren, die auf Packagist verfügbar sind.
Nach der Installation von Composer fahren Sie mit der Installation der Kern-Routing-Komponenten mit den folgenden Befehlen fort.
$composer require symfony/routing
Während die Routing-Komponente selbst ausreicht, um umfassende Routing-Funktionen in Ihrer Anwendung bereitzustellen, werden wir auch einige zusätzliche Komponenten installieren, um uns das Leben zu erleichtern und die bestehende Kern-Routing-Funktionalität zu bereichern.
Zuerst werden wir mit der Installation der HttpFoundation-Komponente fortfahren, die objektorientierte Wrapper für globale PHP-Variablen und antwortbezogene Funktionen bereitstellt. Dadurch wird sichergestellt, dass Sie nicht direkt auf globale Variablen wie $_GET
、$_POST
zugreifen müssen.
$composer require symfony/http-foundation
Wenn Sie als Nächstes Ihre Anwendungsrouten in einer YAML-Datei statt in PHP-Code definieren möchten, kommt die YAML-Komponente ins Spiel, da sie Ihnen bei der Konvertierung von YAML-Strings in PHP-Arrays und umgekehrt hilft.
$composer require symfony/yaml
Abschließend installieren wir die Config-Komponente, die mehrere Dienstprogrammklassen zum Initialisieren und Verarbeiten von Konfigurationswerten bereitstellt, die in verschiedenen Dateitypen (wie YAML, INI, XML usw.) definiert sind. In unserem Fall werden wir dies verwenden, um Routen aus einer YAML-Datei zu laden.
$composer require symfony/config
Das ist der Installationsteil, aber wie soll man ihn verwenden? Fügen Sie einfach die von Composer erstellte Datei autoload.php in Ihre Anwendung ein, wie im folgenden Codeausschnitt gezeigt.
<?php require_once './vendor/autoload.php'; // application code ?>
Grundlegendes Routing einrichten
Im vorherigen Abschnitt haben wir die Installation der erforderlichen Routing-Komponenten abgeschlossen. Jetzt können Sie das Routing sofort in Ihrer PHP-Anwendung einrichten.
Lassen Sie uns fortfahren und die Datei basic_routes.php mit dem folgenden Inhalt erstellen.
<?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(); }
Das Einrichten des Routings mithilfe der Symfony-Routing-Komponente umfasst normalerweise eine Reihe der unten aufgeführten Schritte.
- Initialisieren
Route
Objekt für jede Anwendungsroute. - Alle
Route
对象添加到RouteCollection
Objekte zu Objekten hinzufügen. -
RequestContext
Initialisieren Sie das -Objekt, das die aktuellen Kontextinformationen der Anforderung speichert. -
RouteCollection
对象和RequestContext
对象来初始化UrlMatcher
Initialisieren Sie dasUrlMatcher
-Objekt, indem Sie das -Objekt und das
Routing-Objekte für verschiedene Routen initialisierenfoo
Route definieren. Route
$foo_route = new Route( '/foo', array('controller' => 'FooController') );
Der erste Parameter des Konstruktors ist der URI-Pfad und der zweite Parameter ist ein Array benutzerdefinierter Eigenschaften, die zurückgegeben werden sollen, wenn diese bestimmte Route abgeglichen wird. Normalerweise handelt es sich um eine Kombination aus Controllern und Methoden, die Sie aufrufen, wenn diese Route angefordert wird.
Als nächstes werfen wir einen Blick auf das parametrisierte Routing. foo/1
、foo/123
等类似的 URI。请注意,我们将 {id}
参数限制为仅限数字值,因此它不会匹配 foo/bar
这样的 URI,因为 {id}
$foo_placeholder_route = new Route( '/foo/{id}', array('controller' => 'FooController', 'method'=>'load'), array('id' => '[0-9]+') );
Parametern übereinstimmen, die als Zeichenfolgen bereitgestellt werden.
Fügen Sie alle Routenobjekte zum RouteCollection-Objekt hinzuRouteCollection
$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
方法查找路由。
除此之外,您还可以使用路由组件在应用程序中生成链接。提供了 RouteCollection
和 RequestContext
对象,UrlGenerator
允许您为特定路由构建链接。
$generator = new UrlGenerator($routes, $context); $url = $generator->generate('foo_placeholder_route', array( 'id' => 123, ));
generate
方法的第一个参数是路由名称,第二个参数是数组,如果是参数化路由,则可以包含参数。上面的代码应该生成 /basic_routes.php/foo/123 URL。
从 YAML 文件加载路由
在上一节中,我们使用 Route
和 RouteCollection
对象构建了自定义路由。事实上,路由组件提供了不同的方式供您选择来实例化路由。您可以从各种加载器中进行选择,例如 YamlFileLoader
、XmlFileLoader
和 PhpFileLoader
。
在本节中,我们将通过 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(); }Nach dem Login kopieren
在这种情况下唯一不同的是我们初始化路由的方式!
$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 应用程序中实现路由变得轻而易举。在此过程中,我们创建了一些示例来演示路由组件的各个方面。
Das obige ist der detaillierte Inhalt vonRichten Sie Routing in PHP-Anwendungen mit der Symfony-Routing-Komponente ein. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Die Geheimwaffe zur Beschleunigung der PHP-Anwendungsbereitstellung: Die schnelle und effiziente Bereitstellung von Anwendungen war schon immer eine der wichtigen Aufgaben des Softwareentwicklungsteams. Bei der PHP-Entwicklung umfasst die Bereitstellung einer Anwendung normalerweise mehrere Schritte wie das Hochladen von Dateien, das Aktualisieren von Code und das Konfigurieren der Umgebung. Um diesen Prozess zu vereinfachen und zu beschleunigen, werden nach und nach moderne Entwicklungstools und -technologien eingeführt. Eine der weithin anerkannten Geheimwaffen ist Deployer. Deployer ist eine PHP-Bibliothek für die automatisierte Anwendungsbereitstellung

So verwenden Sie Deployer zum Bereitstellen von PHP-Anwendungen. Im modernen Softwareentwicklungsprozess wird die automatisierte Bereitstellung immer wichtiger. Deployer ist ein einfaches und leistungsstarkes PHP-Bereitstellungstool, das uns bei der einfachen Bereitstellung von PHP-Anwendungen helfen kann. In diesem Artikel wird erläutert, wie Sie Deployer zum Bereitstellen von PHP-Anwendungen verwenden, und es werden einige Codebeispiele bereitgestellt. 1. Deployer installieren Zuerst müssen wir Deployer über Composer installieren. Führen Sie den folgenden Befehl in der Befehlszeile aus

Was sind Symfony-Routing-Komponenten? Die Routing-Komponente von Symfony ist eine sehr beliebte Routing-Komponente, die von mehreren Frameworks übernommen wurde und viel Flexibilität bietet, wenn Sie Routing in Ihrer PHP-Anwendung einrichten möchten. Wenn Sie eine benutzerdefinierte PHP-Anwendung erstellt haben und nach einer funktionsreichen Routing-Bibliothek suchen, ist Symfony Routing Component einer der besten Kandidaten. Außerdem können Sie die Routen Ihrer Anwendung im YAML-Format definieren. Beginnend mit der Installation und Konfiguration demonstrieren wir anhand praktischer Beispiele die vielfältigen Möglichkeiten dieser Komponente zur Routing-Konfiguration. In diesem Artikel erfahren Sie: Installation und Konfiguration der Symfony-Routing-Komponente So richten Sie eine Basisroute ein So laden Sie eine Route aus einer YAML-Datei Erstellen Sie eine Route als Annotation:

Wie kann man Memcache verwenden, um die Leistung und Verfügbarkeit von PHP-Anwendungen zu verbessern? Einleitung: Mit der rasanten Entwicklung von Internetanwendungen und der Zunahme der Benutzerbesuche ist die Verbesserung der Leistung und Verfügbarkeit von Anwendungen zu einem der Probleme geworden, die Entwickler dringend lösen müssen. Unter diesen ist die Verwendung des Caches eine gängige Optimierungsmethode. Memcache ist eine häufig verwendete Caching-Technologie, die die Leistung und Verfügbarkeit von Anwendungen erheblich verbessern kann. In diesem Artikel wird die Verwendung von Memcache in PHP-Anwendungen vorgestellt und spezifische Codebeispiele gegeben. Installieren

Effiziente Batch-Bereitstellung von PHP-Anwendungen: Verwenden Sie Deployer. Einführung: Mit dem Aufkommen von Cloud Computing, Containerisierung und Microservice-Architektur ist die Bereitstellung moderner Anwendungen immer komplexer und umständlicher geworden. Insbesondere in Situationen, in denen ein Entwicklungsteam häufig mehrere PHP-Anwendungen bereitstellen muss, ist die manuelle Bereitstellung jeder Anwendung sehr zeitaufwändig und fehleranfällig. Um dieses Problem zu lösen, können wir das Deployer-Tool verwenden, um den Bereitstellungsprozess von PHP-Anwendungen zu automatisieren und zu vereinfachen. In diesem Artikel stellen wir den Deployer vor

Anwendung von Sicherheitstesttools auf PHP-Anwendungen Mit der Entwicklung des Internets wird die Verwendung von PHP-Anwendungen im Netzwerk immer häufiger. Allerdings nehmen auch die Sicherheitsbedrohungen zu. Um die Sicherheit von PHP-Anwendungen zu gewährleisten, müssen Entwickler effektive Sicherheitstests durchführen. In diesem Artikel werden einige häufig verwendete Sicherheitstesttools vorgestellt und relevante Codebeispiele bereitgestellt, um Entwicklern dabei zu helfen, ihre Anwendungen besser zu schützen. Statische Code-Analysetools Statische Code-Analysetools können potenzielle Schwachstellen im Quellcode überprüfen und relevante Informationen bereitstellen

Da Webanwendungen in den letzten Jahren immer komplexer geworden sind, ist die Optimierung der Antwortzeit von Webanwendungen zu einem heißen Thema geworden. Unter diesen ist die Caching-Technologie ein wichtiges Mittel zur Optimierung der Antwortzeit. In diesem Artikel erfahren Sie, wie Sie die Reaktionszeit von PHP-Anwendungen durch Caching-Technologie optimieren können. 1. Warum ist Caching erforderlich? Wenn ein Benutzer auf eine Webanwendung zugreift, analysiert der Webserver das PHP-Skript in HTML-Code und gibt ihn an den Browser des Benutzers zurück. Wenn das PHP-Skript jedoch sehr komplex ist, muss HTM zurückgegeben werden

Memcached ist ein Open-Source-, einfach bereitzustellendes und leichtes verteiltes Caching-System, das häufig beim Caching von Webanwendungen verwendet wird. Es kann verwendet werden, um Engpässe beim Datenbankzugriff zu beheben, die häufig bei größeren Webanwendungen auftreten, und gleichzeitig die Anwendungsleistung zu verbessern. In diesem Artikel besprechen wir, wie Sie Memcached verwenden, um das Caching für PHP-Anwendungen zu optimieren. Verwenden von Caching Mithilfe von Caching kann die Anzahl der Abfragen an die Datenbank in einer Webanwendung effektiv reduziert werden. Denn wenn bereits ein Abfrageergebnis vorliegt
