当前位置: 首页 > 后端技术 > PHP

发布自己的composer包的好处

时间:2023-03-29 16:17:24 PHP

Composer模块化,降低代码复用成本统一的第三方代码组织方式版本更新内容更科学我的demo实现了类似tp3的路由功能。文献目录和代码如下:app_path=dirname(dirname(__DIR__));}functionhandle(){if($this->mode==1){//get传递方式解析方式$controllerName=empty($_GET['c'])?'index':$_GET['c'];$actionName=empty($_GET['a'])?'index':$_GET['a'];$ucController=ucfirst($controllerName);$controllerNameAll=$this->controllerNamespace。'\\'。$uc控制器。'控制器';$controllerFile=$this->app_path.'/'.$this->controllerNamespace.'/'.$ucController。'控制器.php';include_once$controllerFile;$controller=new$controllerNameAll();返回call_user_func([$controller,ucfirst($actionName)]);}elseif($this->mode==2){//斜切分路径分析法$controllerName='Index';$actionName='索引';$参数=数组();$_SERVER['REQUEST_URI'];$position=strpos($url,'?');$url=$position===false?$url:substr($url,0,$position);$query_str=str_replace($url,'',$_SERVER['REQUEST_URI']);$query_str=trim($query_str,'?');parse_str($query_str,$query_arr);,'/');如果($url){$urlArray=explode('/',$url);$urlArray=array_filter($urlArray);$controllerName=ucfirst($urlArray[0]););$actionName=$urlArray?$urlArray[0]:$actionName;array_shift($urlArray);//$param=$urlArray?=$this->app_path.'/'.$this->controllerNamespace.'/'.$controllerName.'控制器.php';include_once$controllerFile;$controller=$this->controllerNamespace。'\\'。$controllerName.'控制器';if(!class_exists($controller)){exit($controller.'控制器不存在');}if(!method_exists($controller,$actionName)){exit($actionName.'方法不存在');}$dispatch=new$controller();call_user_func_array(array($dispatch,$actionName),$query_arr);然后执行初始化命令:composerinit这里进入终端命令行交互:欢迎使用Composer配置生成器这个命令将引导你创建你的composer.jsonconfig.Packagename(/)[machuang/bao]:martist/routerDescription[]:路由作者[machuang,ntoskip]:MinimumStability[]:PackageType(e.g.library,project,metapackage,composer-plugin)[]:libraryLicense[]:定义你的依赖。你想以交互方式定义你的依赖关系(需要)吗[是]?搜索包:您想以交互方式定义您的开发依赖项(require-dev)[是]?搜索包:{"name":"martist/router","description":"routing","type":"library","authors":[{"name":"machuang","email":"machuang@julyedu.cn"}],"require":{}}是否确认生成[是]?yesImportant几个填写项:Packagename(重要):包名,一般是公司名+“/”+包名如baocai/yprintMinimumStability:一般默认填写dev,因为第一次推送代码,是在dev-master分支上面,dev是最小的稳定版本标识号。PackageType:根据库类别填写,sdk,lib,都可以License:Copyright,默认填写MIT然后填写自己库需要的依赖,默认填写no,后续可以在composer.json中补充修改根目录下的composer.json文件,添加自动加载,编辑生成的composer.json文件,添加php的版本要求和自动加载(使用PSR-4),加载所有文件在src目录,如下{"name":"martist/router","description":"router","type":"library","license":"MIT","authors":[{"name":"machuang","email":"1203580780@qq.com"}],"minimum-stability":"dev","require":{},"autoload":{"psr-4":{"martist\\":"src/"}}}来测试我们简单测试一下我们的类是否正常运行我们执行composer在项目根目录安装,完成初始配置。创建测试文件在根目录下新建一个测试文件test.phphandle();然后创建controller目录和文件,如下: