# wekcms **Repository Path**: wekyun/wekcms ## Basic Information - **Project Name**: wekcms - **Description**: PHP开源CMS管理系统! - **Primary Language**: PHP - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 11 - **Forks**: 0 - **Created**: 2021-02-19 - **Last Updated**: 2023-03-27 ## Categories & Tags **Categories**: cms **Tags**: None ## README # wekcms内容管理系统! #### 系统简介 PHP开源CMS管理系统! #### 目录架构 ``` ├─wekcms 系统根目录 │ ├─app 开发应用目录 │ │ ├─model 数据表模型 │ │ ├─modules 项目模块,核心开发目录 │ │ ├─stop 拦截器存放目录 │ ├─cache 系统文件缓存目录 │ ├─configs 配置文件目录 │ ├─functions 自定义函数库目录 │ ├─install 安装目录 │ ├─resources 静态资源存放目录 │ ├─route 路由规则目录 │ ├─templates 模板存放目录 │ ├─vendor composer组件目录 │ ├─wekcms wekcms框架核心目录 │ |─classes 框架类库文件,自动加载 │ │ |─extend 扩展目录,初始化不自动加载 │ │ |─functions 框架函数文件,自动加载 │ │ |─tmp 框架自用提示模板目录 │ │ ├─app 框架初始化文件 │ ├─index.php 入口文件目录 ``` #### 安装教程 1. 使用gitee提供的方式下载 2. 访问:域名/install 安装 #### 开发文档: **开发注意事项:** - wekcms支持php5.6~7.3 php7.4包括7.4以上暂不兼容 - 模块的控制器名和方法名不能重复! - ##### 1:自定义路由 路由的规则定义在根目录的route目录下,框架初始化会加载route里所有的路由规则,路由规则建议一个模块是一个路由分组,不建议创建过多路由文件,有一点影响性能的事情都不要做! 路由文件的命名规则:文件名.route.php 路由文件必须以**.route.php**结尾才会被自动加载! 路由的定义: ~~~php //有效请求域名,为根域名 Route::get('/', function () { dd('访问首页显示的内容,这是一个get请求的闭包路由,post请求无效'); }); //有效请求域名为 根域名/post Route::post('post', function () { dd('post请求才有效的闭包路由'); }); //有效请求域名为:根域名/all Route::all('all', function () { dd('任何请求类型的都有效,get,post等'); }); //有效请求域名为:根域名/map Route::map('map', function () { dd('任何请求类型的都有效,get,post等'); }, 'post,get'); //有效请求域名为:根域名/map Route::map('map', function () { dd('只有post请求类型的有效'); }, 'post'); //分组路由,分组路由不支持分组嵌套,路由还能写中文哦 //参数一是用户请求的前缀 参数二是转发到控制器方法的公共前缀 Route::group('wek', 'app\content', function () { //有效请求域名为:根域名/wek/闭包 Route::get('/闭包', function () { dd('闭包分组路由'); }); //有效请求域名为:根域名/wek/wek //转发的是:app(目录)/content(模块)/content(控制器)/wek(方法) //完整的是 app/content/content/wek 控制器和方法指建@隔开 Route::get('/wek', '\content@wek'); }); ~~~ ##### 2:路由参数 **http://wekcms.cc/wek-1-2.html** 以上url链接中,路由匹配的规则为 wek 路由的参数为wek后面的1和4,参数是以【**-**】隔开的,并且按照顺序1,2,3不包括.html后缀 **获取路由参数:** ~~~php public function wek() { dd($_GET); } ~~~ 打印的结果为: ~~~ Array ( [s] => /wek-1-4.html [tid] => 1 [url_1] => 1 [url_2] => 2 ) ~~~ **由此可见:** $_GET['url_1']的值为1 $_GET['url_2']的值为2 如果后面有更多的参数,依次类推,每个参数的值就是 url_参数的第几个的位数,从1计数,理论上,浏览器能写多少就能带多少 ##### 3:路由拦截器 拦截器使用非常简单,下面开始说明: **1:创建拦截器** 项目根目的 `app/stop` 用于存放拦截器,拦截器文件命名规则是`user.stop.php`,以`.stop.php`后缀结尾,在`user.stop.php`中定义的方法就是拦截方法。 例如:创建一个用户类的拦截器 在app/stop创建了类文件 `user.stop.php` 定义了类方法`auth`,就创建了一个用户类拦截器。 **app/stop/user.stop.php** ~~~php RouteStop(function () { dd('闭包路由拦截器'); }); ``` **在路由上注册定义好的`auth` 拦截器** ->RouteStop('user.auth')就是注册拦截器,在定义路由的实体上注册拦截器要使用 `RouteStop` 方法。 ``` RouteStop('user.auth'); ``` **在路由上注册分组拦截器** ->GroupStop('user.auth')就是注册分组的路由拦截器,在分组的实体上注册拦截器要使用 `GroupStop` 方法。 **拦截器优先级**:可以同时给路由分组和路由注册拦截器,路由的拦截器优先与分组的拦截器,就是说分组和路由都定义了拦截器,会先执行路由上注册的拦截器。 ```php #分组路由,分组路由不支持分组嵌套 Route::group('wek', 'app\modules\content', function () { Route::get('/closure', function () { dd('闭包分组路由'); })->RouteStop(function () { dd('闭包路由拦截器'); }); //此处是路由分组的拦截器 })->GroupStop('user.auth'); ``` **注册多个拦截器** 路由和分组可以同时注册多个拦截器,但是闭包只能注册一个。 注册多个拦截器的写法就是,多个拦截器的执行顺序是从前往后,路由优先与分组。 ```php //路由注册多拦截器,定义成数组 RouteStop(['user.auth','user.auth2','user.auth3']); //路由分组注册多拦截器,定义成数组 GroupStop(['user.auth','user.auth2','user.auth3']); ``` ##### 4:伪静态规则 **Ngix伪静态规则** 在ngix配置的location中这样写,宝塔面板直接选择tp伪静态也是可以的 ~~~ location / { if (!-e $request_filename){ rewrite ^(.*)$ /index.php?s=$1 last; break; } } ~~~ **Apache伪静态规则** 在根目录的index.php入口文件同级目录创建 .htaccess目录,并写入以下规则即可 ~~~ Options +FollowSymlinks -Multiviews RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L] ~~~ #### 开发计划 - [x] 完成wekcms步骤条安装功能 - [x] 完成模板引擎和缓存应用设计 - [x] app目录对模块,模型,细分化(修改路由组件) - [x] 新增拦截器,并在路由注册拦截器 - [ ] 内容模块的设计开发