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

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

标签:
PHP

突然想开个视频,传上来挣点奶粉钱。不知道可不可行,@慕女神,你就说行不行吧。。

撸代码。

前几篇内容已经能成功的跑起来,但它只是能跑起来,除此之外,没屁用。浏览器输入http://xxxx:9501/XXXX或http://xxxx:9501/YYYY,它没什么变化,这就是个勺子(注:陕西方言中傻子的意思,请看电影《一个勺子》)。接下来就先让它能给大家有个正常人能有的反应。。

首先,客户端发起请求时程序得指路,还得指到对的地方,这就是路由的基础功能了。而且我想给它定个目录稍高那么一丢丢。
一、能定义默认访问地址,就是它的默认首页。
二、咱还能给它来个伪扩展,比如“.html”或者是".lmth"。
三、有些地址太长,还能给它缩短一些。
四、让URL好看一些,比如/user/info.html?uid=1,变身后就 /user/info/1.html,是不是很好看。
五、开写。

创建文件 frame/Lib/Router.php,贴代码

<?php
/**
 * Router
 */

namespace Piz;

class Router
{
    /**实例
     * @var object
     */
    private static $instance;
    //默认配置
    private static $config = [
        'm'             => 'index',     //默认模块
        'c'             => 'index',     //默认控制器
        'a'             => 'init',     //默认操作
        'ext'           => '.html',          //url后缀    例如 .html
        'rules'         =>  [           //自定义路由
            'user'  => 'uesr/index/init',
            'login' => 'index/login/init',
        ]
    ];
    private function __construct() {}
    /**
     * 获取实例
     * @return object
     */
    public static function get_instance() {
        if( is_null(self::$instance) ) {
            self::$instance = new self();
        }
        return self::$instance;
    }

    /**
     * 这里就要一个参数 swoole_http_server->request->server[request_uri]
     */
    public function http($request_uri){
        $param      = [];
        $module     = self::$config['m'];
        $controller =  self::$config['c'];
        $action     =  self::$config['a'];

        if(empty($request_uri)) {
            return ['m'=>$module ,'c'=>$controller,'a'=>$action,'p'=>$param];
        }

        $path = trim($request_uri, '/');
        if(!empty( self::$config['ext']) ){
            $path = rtrim ($path,self::$config['ext']);
        }

        if (!empty(self::$config['rules']) ) {
            foreach (self::$config['rules'] as $key => $value) {
                if(substr($path,0,strlen($key)) == $key) {
                    $path = str_replace($key, $value, $path);
                    break;
                }
            }
        }

        $param = explode( "/" , $path);
        !empty($param[0]) && $module = $param[0];
        isset($param[1]) && $controller = $param[1];
        isset($param[2]) && $action = $param[2];

        if(count($param)>=3){
            $param = array_slice($param, 3);
        }else{
            $param = array_slice($param, 2);
        }

        return ['m'=>$module ,'c'=>$controller,'a'=>$action,'p'=>$param];
    }
}

改App.php代码,测试路由。

public function http($request,$response){
        $req = Request::get_instance ();
        $req->set($request);
        $router = Router::get_instance ()->http($req->server['request_uri']);
        $response->end(var_export ($router,TRUE));
    }

启动start.php

看效果
URL:http://192.168.1.111:9501/
图片描述

URL: http://192.168.1.111:9501/index/index/index/1
图片描述

OK。。

吃饭,午睡,下午再更

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

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

评论

作者其他优质文章

正在加载中
PHP开发工程师
手记
粉丝
77
获赞与收藏
47

关注作者,订阅最新文章

阅读免费教程

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

100积分直接送

付费专栏免费学

大额优惠券免费领

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

举报

0/150
提交
取消