本教程示例代码见 github:https://github.com/xdlmr/myframe
上篇我们已经安装好了composer,下面我们来构建路由。
安装klein
本文我们采用https://github.com/klein/klein.php,对应的composer包为klein/klein
两种方法安装:
- 更改composer.json为:
{
"require": {
"klein/klein": "^2.1"
}
}
运行 composer update,成功之后将得到以下目录:
2 命令行进入phpframe目录,执行composer require klein/klein,稍等一会就能安装成功。
至此,klein 包安装成功!
PS:如果安装速度慢或者卡顿,请使用composer国内镜像。命令行执行:
composer config -g repo.packagist composer https://packagist.phpcomposer.com
上述命令将会在当前项目中的 composer.json 文件的末尾自动添加镜像的配置信息(你也可以自己手工添加):
"repositories": {
"packagist": {
"type": "composer",
"url": "https://packagist.phpcomposer.com"
}
}
路由测试
下面我们就来见证klein的奇迹吧,让klein跑起来
在文件夹phpframe下新建 index.php 文件:
<?php
define("WEB_ROOT", realpath('./'));//项目根路径
date_default_timezone_set('Etc/GMT-8');
require_once WEB_ROOT . '/vendor/autoload.php';//自动加载
//下面是路由代码
$router = new \Klein\Klein();
$router -> respond('GET', '/', function() {
echo "hello world";
});
$router -> dispatch();
这里我设置的项目入口文件和路由文件都是index.php,当然你也可以把路由代码单独放在一个route.php文件里,引入便是。
我在本地xampp使用8989 端口,访问 http://127.0.0.1:8989/可以看到:
如果你成功看到以上页面,那么恭喜你,路由配置成功!
完善路由
整个框架会定义一个比较通用的路由,下面我们加入前端发htpp请求的的路由、页面访问路由,以及完善访问index页面的路由
完善后index.php文件的路由如下:
$router = new \Klein\Klein();
//前端http请求路由
$router -> respond([ 'GET', 'POST' ], '/[:controller]/[:func]', function($request, $response, $service) {
$obj = Box ::getObject($request -> controller);
if($obj == null) {
header('HTTP/1.1 404 Not Found');
return;
}
$func = $request -> func;
$response -> header('Content-Type', 'text/json');
return json_encode($obj -> $func($request));
});
//页面访问路由
$router -> respond([ 'GET', 'POST' ], '/[:controller]', function($request, $response, $service) {
$obj = Box ::getObject($request -> controller);
if($obj == null) {
header('HTTP/1.1 404 Not Found');
return;
}
$func = "render";
return $obj -> $func($request);
});
$router -> respond('GET', '/', function() {
$controller = "index";
$func = "render";
$obj = Box ::getObject($controller);
if($obj == null) {
header('HTTP/1.1 404 Not Found');
return;
}
return $obj -> $func();
});
$router -> dispatch()