为了账号安全,请及时绑定邮箱和手机立即绑定

SWOOLE 从入门到放弃之写个小框架(十)

标签:
PHP

接下来该写什么呢,改造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

点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消