模块及命名空间
在CrossPHP项目中, 默认的模块结构如下
├─app
│ └─web
│ ├─controllers
│ └─views
├─modules
│ └─admin
app按文件夹划分, 每个app都包含独MVC
模式中的CV
层, 以及V
层模板和布局文件. Modules包含各app公用的模块, 传统框架的Model只是Module的一个成员
控制器
控制器位于对应app
的controllers
文件夹下, 以web
为例, 控制器的命名空间为:
namespace app\web\controllers;
规则如下:
app\文件夹名称\controllers
依据此规则, 假设名为admin
的app的控制器命名空间就为:
namespace app\admin\controllers;
视图控制器
与传统的MVC
框架比, 多了视图控制器
的概念, 视图控制器
命名和控制器命名保持一致, 并在结尾增加View
. 假设名称是Main
的控制器, 对应的视图控制器
的名称就为MainView
, MainView.php
文件放在app/web/views
文件夹中, MainView
类的命名空间为:
namespace app\web\views;
视图控制器
用于处理模板数据, 在视图控制器中
定义的方法, 可以在模板中直接调用. 这很轻易的实现了对模版的扩展. 当要从HTML视图切换到JSON\XML或未来的某种格式时, 只需要先在视图控制器中添加对应处理的方法, 再把app配置文件中的视图格式配置指定为方法名就可以了(sys->display).
Modules
Module不是单一的Model, 在现代WEB开发中, 数据来源可能需要多个Model配合, 比如先从缓存Model中检查缓存数据是否存在, 如果存在就直接返回, 不存在就从数据库Model中去获取数据, 保存到缓存, 以备下次使用. 传统的Model只是Module中的一个成员.
Module服务于所有的app, 以保持不同app中数据来源的一致性. Module根据功能来划分, 不同的功能分别放到不同的文件夹, 假设有admin
, user
, article
三个功能模块, 他们在Modules文件夹下的路径分别是:
modules/admin
modules/user
modules/articles
他们的类命名空间分别是:
namespace modules\admin;
namespace modules\user;
namespace modules\articles;
自定义模块
除了以上默认的模块以外, 你也可以在自己的项目中自定义模块, 自定义模块的命名规则如下:
自定义模块名称\子模块名称
自定义模块名称即文件夹名称, 假设现在要定义验证模块validate
, 首先在项目根目录下新建文件夹validate
, 创建好的项目结构如下:
├─app
│ └─web
│ ├─controllers
│ └─views
├─modules
└─validate
在validate下新建一个类文件UserValidate.php
, 输入以下内容用于验证用户相关信息:
namespace validate;
class UserValidate
{
static function name($user_name)
{
echo $user_name;
}
}
使用自定义模块
我们可以在项目的任何位置使用这个用户验证类, 只需在要使用的类里注明命名空间就可以了, 在控制器中的使用方法如下:
namespace app\web\controllers;
use validate\UserValidate;
class Main extends Web
{
function index()
{
UserValidate::name("abc");
}
}
你可以根据项目需求自定义各种模块, 更优雅的完成工作