前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >制作一个PHP简易框架(四)-- 路由系统

制作一个PHP简易框架(四)-- 路由系统

作者头像
caoayu
发布2021-03-01 10:53:06
9380
发布2021-03-01 10:53:06
举报

一 准备

二 引入容器

三 信息调试

路由系统

对于一个 web 服务来说,路由系统基本是所有 php 开发框架中十分基本也是必需的功能了。

安装

包地址:https://github.com/thephpleague/route, 该包的作者也是前面 container 包的作者。

composer require league/route
composer require laminas/laminas-diactoros
composer require laminas/laminas-httphandlerrunner

使用

安装完毕后进行测试。新建一个 route.php ,在 bootstrap/core/ 下。

# bootstrap/core/route.php
<?php

use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;

$request = Laminas\Diactoros\ServerRequestFactory::fromGlobals(
    $_SERVER,
    $_GET,
    $_POST,
    $_COOKIE,
    $_FILES
);

$router = new League\Route\Router;

// map a route
$router->map('GET', '/', function (ServerRequestInterface $request): ResponseInterface {
    $response = new Laminas\Diactoros\Response;
    $response->getBody()->write('<h1>Hello, World!</h1>');
    return $response;
});

$response = $router->dispatch($request);

// send the response to the browser
(new Laminas\HttpHandlerRunner\Emitter\SapiEmitter)->emit($response);

可以看到 request 变量中包含了一些全局变量,以后我们就可以直接从 request 变量中,使用面向对象的方式查看请求的信息。

现在打开项目的首页,会返回一个 Hello World 在浏览器上。说明路由运行成功。

整合路由文件

新建一个 routes 目录,用来保存所有的路由文件,并创建 web.php 来保存 web 服务的路由。

# route/web.php
<?php

// map a route
$router->get('/', function ($request) {
    $response = new Laminas\Diactoros\Response;
    $response->getBody()->write('<h1>Hello, World!</h1>');
    return $response;
});
$router->get('/home', function ($request) {
    $response = new Laminas\Diactoros\Response;
    $response->getBody()->write('<h1>Hello, Home Page!</h1>');
    return $response;
});

修改原来的 route.php 文件,将所有定义的路由引入进去。

# bootstrap/core/route.php
<?php

include 'path/to/vendor/autoload.php';

$request = Laminas\Diactoros\ServerRequestFactory::fromGlobals(
    $_SERVER,
    $_GET,
    $_POST,
    $_COOKIE,
    $_FILES
);

$router = new League\Route\Router;

require_once __DIR__ . '/../../routes/web.php';

修改 index.php 将发送响应的逻辑放到最后。

# public/index.php
<?php

require_once __DIR__ . '/../bootstrap/app.php';

$response = $router->dispatch($request);

// send the response to the browser
(new Laminas\HttpHandlerRunner\Emitter\SapiEmitter)->emit($response);

打开首页输出 Hello, World! ,进入 /home 路由输出 Hello, Home Page! ,则说明路由映射成功。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-02-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 路由系统
  • 安装
  • 使用
  • 整合路由文件
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档