接下来该写什么呢,改造App.php吧。
首先创建配置文件config/app.php,代码如下
<?php
/**
* APP配置
*/
return [
'name' => 'server', //项目名称
'namespace' => 'app', //项目命名空间
'path' => realpath (__DIR__.'/../app/'), //项目所在路径
'gzip' => 0, //gzip 等级, 请查看 https://wiki.swoole.com/wiki/page/410.html
//server设置
'ip' => '0.0.0.0', //监听IP
'port' => 9527, //监听端口
'server' => 'websocket' , //服务,可选 websocket 默认http
'set' => [ //配置参数 请查看 https://wiki.swoole.com/wiki/page/274.html
'daemonize' => 0 ,
'enable_static_handler' => TRUE ,
'document_root' => realpath (__DIR__.'/../static/') ,
'worker_num' => 4,
'max_request' => 10000,
'task_worker_num' => 4,
],
];
修改 frame/base.php,读取config/app.php,向框架注册命名空间和其所在路径 ,增加如下代码
//注册项目命名
\Piz\Loader::addNamespace (config('app.namespace'),config('app.path'));
修改frame/Lib/App.php ,修改后的代码如下
<?php
namespace Piz;
class App
{
//实例
private static $instance;
//映射表
private static $map = [];
//防止被一些讨厌的小伙伴不停的实例化,自己玩。
private function __construct ()
{
}
//还得让伙伴能实例化,并且能用它。。
public function get_instance(){
if(is_null (self::$instance)){
self::$instance = new self();
}
return self::$instance;
}
public function http($server,$request,$response){
if($request->server['request_uri'] == '/favicon.ico') return ;
$req = Request::get_instance ();
$req->set($request);
$router = Router::get_instance ()->http($req->server['request_uri']);
$app_namespace = Config::get_instance ()->get('app.namespace');
$module = $router['m'] ;
$controller = $router['c'] ;
$action = $router['a'] ;
$param = $router['p'] ;
$classname = "\\{$app_namespace}\\modules\\{$module}\\{$controller}" ;
if(!isset(self::$map[$classname])){
$class = new $classname ;
self::$map[$classname] = $class;
}
try{
//测试效果
if(!empty(ob_get_contents ())) ob_end_clean ();
ob_start();
self::$map[$classname]->$action($param);
$content = ob_get_contents();
ob_end_clean();
$response->end($content);
}catch(\Exception $e){ //在此处返回 404错误的原因是因为加载器已经在查找不到文件时有说错误说明
$response->header('Content-type',"text/html;charset=utf-8;");
$response->status(404);
$response->end('404 NOT FOUND');
return ;
}
}
}
App->http方法增加了一个参数$server,所以frame/Lib/Server.php的onRequest方法也要同时修改,修改后的代码如下
public function onRequest($request,$response){
App::get_instance()->http ($this->server,$request,$response);
}
创建项目文件app/modules/index/index.php,代码如下
<?php
<?php
namespace app\modules\index;
class index
{
public function init(){
echo date('Y-m-d h:I:s'),'<br/>';
echo __CLASS__;
}
}
运行效果如下图
今天就写到这了,累了。明天开始修改frame/Lib/Server.php