Symfony 라우팅 구성 요소를 사용하여 PHP 애플리케이션에서 라우팅 설정
Symfony 라우팅 구성요소란 무엇인가요?
Symfony 라우팅 구성 요소는 여러 프레임워크에서 조정되었으며 PHP 애플리케이션에서 라우팅을 설정하려는 경우 많은 유연성을 제공하는 매우 인기 있는 라우팅 구성 요소입니다.
사용자 정의 PHP 애플리케이션을 구축했고 기능이 풍부한 라우팅 라이브러리를 찾고 있다면 Symfony Routing Component가 최고의 후보 중 하나입니다. 또한 YAML 형식으로 애플리케이션의 경로를 정의할 수도 있습니다.
설치 및 구성부터 시작하여 이 구성 요소가 라우팅 구성에 대해 갖는 다양한 옵션을 실제 예를 통해 시연해 보겠습니다. 이 기사에서는 다음에 대해 배울 것입니다:
- Symfony 라우팅 구성요소 설치 및 구성
- 기본 경로 설정 방법
- YAML 파일에서 경로를 로드하는 방법
- 댓글로 경로 만들기: 권장 방법
설치 및 구성
이 섹션에서는 PHP 애플리케이션에서 라우팅을 설정하는 데 필요한 라이브러리를 설치합니다. Packagist에서 사용할 수 있는 필수 라이브러리를 설치하는 데 필요하므로 시스템에 Composer가 이미 설치되어 있다고 가정합니다.
Composer를 설치한 후 다음 명령을 사용하여 핵심 라우팅 구성 요소 설치를 진행하세요.
으아악라우팅 구성 요소 자체는 애플리케이션에서 포괄적인 라우팅 기능을 제공하기에 충분하지만, 우리는 삶을 더 쉽게 만들고 기존 핵심 라우팅 기능을 풍부하게 만들기 위해 몇 가지 추가 구성 요소도 설치할 것입니다.
먼저 PHP 전역 변수 및 응답 관련 기능에 대한 객체 지향 래퍼를 제공하는 HttpFoundation 구성 요소 설치를 진행하겠습니다. $_GET
、$_POST
와 같은 전역 변수에 직접 액세스할 필요가 없도록 보장합니다.
다음으로, PHP 코드 대신 YAML 파일에서 애플리케이션 경로를 정의하려는 경우 YAML 문자열을 PHP 배열로 또는 그 반대로 변환하는 데 도움이 되는 YAML 구성 요소가 작동합니다.
으아악마지막으로 다양한 유형의 파일(예: YAML, INI, XML 등)에 정의된 구성 값을 초기화하고 처리하기 위한 여러 유틸리티 클래스를 제공하는 Config 구성 요소를 설치합니다. 우리의 경우 이를 사용하여 YAML 파일에서 경로를 로드합니다.
으아악설치부분인데 어떻게 사용하는건가요? 실제로 다음 코드 조각에 표시된 대로 Composer에서 생성한 autoload.php 파일을 애플리케이션에 포함시키기만 하면 됩니다.
으아악기본 라우팅 설정
이전 섹션에서는 필요한 라우팅 구성요소 설치를 완료했습니다. 이제 PHP 애플리케이션에서 라우팅을 즉시 설정할 수 있습니다.
다음 내용으로 basic_routes.php 파일을 만들어 보겠습니다.
으아악Symfony Routing 구성 요소를 사용하여 라우팅을 설정하려면 일반적으로 아래 나열된 일련의 단계가 필요합니다.
- 초기화
Route
각 응용 프로그램 경로에 대한 개체입니다. - 모든
Route
对象添加到RouteCollection
개체를 개체에 추가합니다. -
RequestContext
현재 요청 컨텍스트 정보를 저장하는 개체를 초기화합니다. -
RouteCollection
对象和RequestContext
对象来初始化UrlMatcher
개체와
UrlMatcher
개체를 초기화합니다. 다양한 경로에 대한 라우팅 개체 초기화foo
경로를 정의해 보겠습니다. Route
으아악
생성자의 첫 번째 매개변수는 URI 경로이고 두 번째 매개변수는 이 특정 경로와 일치할 때 반환될 사용자 정의 속성의 배열입니다. 일반적으로 이 경로가 요청될 때 호출하는 컨트롤러와 메서드의 조합입니다.
다음으로 매개변수화된 라우팅을 살펴보겠습니다. foo/1
、foo/123
等类似的 URI。请注意,我们将 {id}
参数限制为仅限数字值,因此它不会匹配 foo/bar
这样的 URI,因为 {id}
으아악
매개변수와 일치할 수 있습니다.
모든 경로 개체를 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
方法查找路由。
除此之外,您还可以使用路由组件在应用程序中生成链接。提供了 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(); }로그인 후 복사
在这种情况下唯一不同的是我们初始化路由的方式!
$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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











PHP 애플리케이션 배포를 가속화하는 비밀 무기: Deployer. 빠르고 효율적인 애플리케이션 배포는 항상 소프트웨어 개발 팀의 중요한 작업 중 하나였습니다. PHP 개발에서 애플리케이션 배포에는 일반적으로 파일 업로드, 코드 업데이트, 환경 구성과 같은 여러 단계가 포함됩니다. 이 프로세스를 단순화하고 가속화하기 위해 최신 개발 도구와 기술이 점차 도입되고 있으며 널리 알려진 비밀 무기 중 하나가 Deployer입니다. Deployer는 자동화된 애플리케이션 배포를 위한 PHP 라이브러리입니다.

Deployer를 사용하여 PHP 애플리케이션을 배포하는 방법 최신 소프트웨어 개발 프로세스에서 자동화된 배포가 점점 더 중요해지고 있습니다. Deployer는 PHP 애플리케이션을 쉽게 배포하는 데 도움이 되는 간단하고 강력한 PHP 배포 도구입니다. 이 기사에서는 Deployer를 사용하여 PHP 애플리케이션을 배포하는 방법을 소개하고 몇 가지 코드 예제를 제공합니다. 1. Deployer 설치 먼저 Composer를 통해 Deployer를 설치해야 합니다. 명령줄에서 다음 명령을 실행하세요.

Symfony 라우팅 구성요소란 무엇입니까? Symfony 라우팅 구성 요소는 여러 프레임워크에서 조정되었으며 PHP 애플리케이션에서 라우팅을 설정하려는 경우 많은 유연성을 제공하는 매우 인기 있는 라우팅 구성 요소입니다. 사용자 정의 PHP 애플리케이션을 구축했고 기능이 풍부한 라우팅 라이브러리를 찾고 있다면 Symfony Routing Component가 최고의 후보 중 하나입니다. 또한 YAML 형식으로 애플리케이션의 경로를 정의할 수도 있습니다. 설치 및 구성부터 시작하여 실제 예를 통해 이 구성 요소가 라우팅 구성을 위해 제공하는 다양한 옵션을 보여 드리겠습니다. 이 기사에서는 다음 내용을 학습합니다. Symfony 라우팅 구성 요소 설치 및 구성 기본 경로를 설정하는 방법 YAML 파일에서 경로를 로드하는 방법 주석으로 경로를 생성합니다.

Memcache를 사용하여 PHP 애플리케이션의 성능과 가용성을 향상시키는 방법은 무엇입니까? 서론: 인터넷 애플리케이션의 급속한 발전과 사용자 방문의 증가로 인해 애플리케이션의 성능과 가용성을 향상시키는 것은 개발자가 시급히 해결해야 할 문제 중 하나가 되었습니다. 그 중 캐시를 사용하는 것이 일반적인 최적화 방법입니다. Memcache는 애플리케이션 성능과 가용성을 크게 향상시킬 수 있는 일반적으로 사용되는 캐싱 기술입니다. 이 기사에서는 PHP 애플리케이션에서 Memcache를 사용하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 설치하다

최근 몇 년 동안 웹 애플리케이션이 점점 더 복잡해짐에 따라 웹 애플리케이션의 응답 시간을 최적화하는 방법이 뜨거운 주제가 되었습니다. 그 중 캐싱 기술은 응답 시간을 최적화하는 중요한 수단입니다. 이 기사에서는 캐싱 기술을 통해 PHP 애플리케이션 응답 시간을 최적화하는 방법을 자세히 설명합니다. 1. 캐싱이 필요한 이유는 무엇입니까? 사용자가 웹 애플리케이션에 액세스하면 웹 서버는 PHP 스크립트를 HTML 코드로 구문 분석하여 이를 사용자의 브라우저에 반환합니다. 그러나 PHP 스크립트가 매우 복잡한 경우 HTM을 반환하기 전에

PHP 애플리케이션의 효율적인 일괄 배포: 배포자 사용 소개: 클라우드 컴퓨팅, 컨테이너화 및 마이크로서비스 아키텍처의 등장으로 최신 애플리케이션의 배포가 점점 더 복잡해지고 번거로워지고 있습니다. 특히 개발 팀이 여러 PHP 애플리케이션을 자주 배포해야 하는 상황에서 각 애플리케이션을 수동으로 배포하는 것은 시간이 많이 걸리고 오류가 발생하기 쉽습니다. 이 문제를 해결하기 위해 Deployer 도구를 사용하여 PHP 애플리케이션의 배포 프로세스를 자동화하고 단순화할 수 있습니다. 이번 글에서는 Deployer를 소개하겠습니다.

PHP 애플리케이션에 보안 테스트 도구 적용 인터넷이 발전하면서 네트워크에서 PHP 애플리케이션을 사용하는 일이 점점 더 보편화되고 있습니다. 그러나 보안 위협도 증가하고 있습니다. PHP 애플리케이션의 보안을 보장하려면 개발자는 효과적인 보안 테스트를 수행해야 합니다. 이 기사에서는 일반적으로 사용되는 몇 가지 보안 테스트 도구를 소개하고 개발자가 애플리케이션을 더 잘 보호하는 데 도움이 되는 관련 코드 예제를 제공합니다. 정적 코드 분석 도구 정적 코드 분석 도구는 소스 코드의 잠재적인 취약점을 확인하고 관련 정보를 제공할 수 있습니다.

Memcached는 웹 애플리케이션 캐싱에 널리 사용되는 배포가 쉽고 가벼운 오픈 소스 분산 캐싱 시스템입니다. 대규모 웹 애플리케이션에서 자주 사용되는 데이터베이스 액세스 병목 현상을 해결하는 동시에 애플리케이션 성능을 향상시키는 데 사용할 수 있습니다. 이 기사에서는 Memcached를 사용하여 PHP 애플리케이션의 캐싱을 최적화하는 방법에 대해 설명합니다. 캐싱 사용 캐싱을 사용하면 웹 애플리케이션에서 데이터베이스에 대한 쿼리 수를 효과적으로 줄일 수 있습니다. 쿼리 결과가 이미 존재하는 경우
