当前位置:首页 > CN2资讯 > 正文内容

php自动加载以及php简单路由功能php自动加载

14小时前CN2资讯


前言:

项目中需要在workernman基础上自己完成基础框架,主要是将用户请求的api路由到具体控制器方法,同时用到的类需要自动加载,

原理:

路由:url形如admin/admin/login ,将url分割,获取到具体的类,方法,调用这个方法

自动加载:用spl_autoload_register,注册自动加载方法,通过命名空间找到文件路径,本项目中为了方便命名空间跟文件夹路径保持相同,比如 控制器admin的命名空间为

namespace Applications\admin\controller;

项目目录结构如下

 /Applications 应用目录

/Applications/admin admin模块

/Applications/admin/controller 控制器目录

/lib 类库文件

/vendor composer目录

实现

自动加载

/lib/Autoloader.php

将命名空间转化为文件路径

<?php namespace lib; /** * 自动加载 */ class Autoloader { public static function load($className) { $classPath = str_replace('\\', '/', $className); $classFile = __DIR__ .'/../'.$classPath.'.php'; if (is_file($classFile)) { require_once($classFile); if (class_exists($className, false)) { return true; } } return false; } } spl_autoload_register('\lib\Autoloader::load');

2.路由分发

 /lib/Route.php

找到api对于的控制器方法,然后调用它,此处不用引入控制器文件,会自动加载

其中request类是对请求参数的封装

<?php namespace lib; class Route { /** * 路由分发 * @param Request $request * @return mixed|void */ public static function dispatch(Request $request) { $module = $request->module(); $controller = $request->controller(); $action = $request->action(); //将api转换为对于控制器方法的命名空间 $className = '\\Applications\\' . $module . '\\controller\\' . ucfirst($controller); $obj = new $className($request); $res = call_user_func_array(array($obj, $action), array($request)); return $res; } }

调用

首先引入

require_once __DIR__ . '/../../lib/Autoloader.php';use lib\Route;/** * 当客户端发来消息时触发 * @param int $client_id 连接id * @param mixed $message 具体消息 */ public static function onMessage($client_id, $message) { if ($message == 'ping') return; $message = json_decode($message,true) ?? []; try { $request = new Request($message); } catch (Exception $e){ $response = ['data' => '','code' => $e->getCode(),'msg' => $e->getMessage()]; Gateway::sendToClient($client_id, json_encode($response)); return; } try { $res = Route::dispatch($request); $response = $request->response($res['data'],$res['code'],$res['msg']); } catch (Exception $e) { echo 'Error: ' . $e . PHP_EOL; $response = $request->response('',$e->getCode(),$e->getMessage()); } catch (Error $error) { echo 'Error: ' . $error . PHP_EOL; $response = $request->response('',$error->getCode(),$error->getMessage()); } Log::info('response',$response); // 向当前client_id发送数据 Gateway::sendToClient($client_id, json_encode($response)); }

 

 

    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/26536.html

    分享给朋友:

    “php自动加载以及php简单路由功能php自动加载” 的相关文章

    如何选择低价域名注册商及推荐后缀

    在如今的互联网时代,拥有一个独特而便宜的域名变得尤为重要。无论你是想开始一个新项目、建立个人博客,还是开设在线商店,低价域名都能为你节省一笔不小的预算。接下来,我会盘点一些国外和国内的低价域名注册商,帮助你做出明智的选择。 一、国外便宜域名注册商概览 GoDaddy 我个人对GoDaddy的印象非...

    选择合适的域名注册商,轻松完成域名注册流程

    在如今数字化的时代,域名注册变得越来越重要。它不仅是建立个人或企业在线身份的第一步,也是一种品牌保护和业务推广的手段。在互联网上,域名就像是你的地址,方便别人找到你。因此,选择一个合适的域名注册商显得尤为重要。 域名注册商,是那些提供域名注册、管理和支持服务的公司。可以想象成他们是光明正大的中介,帮...

    Vultr Cloud Computer与High Frequency服务器的全面对比

    在云服务的世界中,Vultr无疑是一个备受瞩目的名字。它提供两种主要的云服务器类型:Vultr Cloud Compute和High Frequency服务器。这两种服务器各有其独特之处,适合不同类型的用户和使用场景。 首先,Vultr Cloud Compute是其最基础的产品,主要以高性价比为卖...

    便宜日本VPS的选择与比较:性价比高的供应商推荐

    在当今数字化时代,VPS(虚拟专用服务器)正成为许多企业和个人的首选解决方案,尤其是在日本市场。对于那些需要可靠网络服务的用户来说,这无疑是一个非常实用的选择。日本的VPS服务以其高性能和稳定性著称,深受开发者、小型企业、网站管理员等用户的喜爱。 日本VPS的定义并不复杂,简单来说,它是一种虚拟化技...

    IEPL:企业国际以太网专线的优势与申请指南

    什么是IEPL 当我第一次接触IEPL(International Ethernet Private Line)时,我意识到它是一种为企业提供国际级别的网络连接服务,特别适合那些需要在不同国家和地区之间高效、安全传输数据的公司。这项服务一般由电信运营商提供,旨在帮助企业实现及时的信息交流和数据传输。...

    最新hudsonvalleyhost优惠码使用技巧与推荐2023

    hudsonvalleyhost 优惠码介绍 hudsonvalleyhost优惠码是一种可以帮助用户在使用hudsonvalleyhost服务时节省费用的代码。这种优惠码一般由字母和数字组成,用户在进行购买或订阅相关服务时输入该代码,就可以享受到折扣或特定的优惠。每个优惠码的有效期和适用范围可能不...