`$vitex = \vitex\Vitex::getInstance()`
创建vitex的实例。
setConfig/getConfig
设置/获取当前的配置
`$vitex->setConfig("templates.path","./templates")`
`$vitex->setConfig(['templates.path'=>'./templates'])`
配置如下
'debug' => false, //默认关闭调试
'templates.path' => './templates',
'templates.ext' => '.html',
'view' => '\vitex\View',
'callback' => 'callback',
'csrf.open' => true,
'csrf.onerror' => null,//一个回调方法 callable,当出错的时候回执行
'router.group_path' => '',
'router.compatible' => false, //路由兼容模式,不支持pathinfo的路由开启
'methodoverride.key' => '__METHOD', //url request method 重写的key
'cookies.encrypt' => true, //是否启用cookie加密 默认启用
'cookies.lifetime' => '20 minutes',
'cookies.path' => '/',
'cookies.domain' => null,
'cookies.secure' => false,
'cookies.httponly' => false,
'cookies.secret_key' => 'Vitex is a micro restfull framework',
设置配置
签名
setConfig(string/array $name, string/null $val = null)
参数
string/array $name 键值/数组配置/配置文件名
string/null $val 值
示例
$this->setConfig('debug',false)
$this->setConfig(['debug'=>false])
$this->setConfig('/home/www/test/config.php')
当配置文件为文件名时,该文件必须要返回一个数组:
<?php
return ['debug'=>true];
获取配置
签名
getConfig(string $name) : mixed
参数
string $name 配置名
示例
$this->getConfig('debug')
这是一个静态方法,用于获取Vitex的实例(单例对象)。
$vitex = \vitex\Vitex::getInstance()
用于初始化一个应用,通过此方法可以设置APP路径、名字,批量设置一些配置文件以及一些预加载的中间件。
主要设置了应用所在的路径,设置好自动加载以及路由分组的名称
签名
init(string $app, string $dir,array setting , array middleware)
参数
string $app 应用的名称(同时也应该是这个应用的文件夹名)
string $dir 应用所在的路径
array setting 批量设置一些配置类似于 setConfig方法
array middleware 批量加载预处理中间件
示例
$vitex->init('app', dirname(__DIR__));
//直接在webroot目录初始化应用
用于设置多个应用时链接访问的映射关系,此映射关系可以把应用绑定到域名或者一个访问目录;域名如test.com,m.test.com
;目录如: /user/verify,/user/check
中的 user
段。
多应用时的映射方式,当您一个大型的项目需要多个应用配合时需要使用此种方式更好的组织代码
例如一个后台管理项目分为 前台以及管理员的后台,此时可以创建两个应用,单独负责自己的事宜域名的映射规则高于默认的级别
签名
setAppMap(array $map,string $domain="default"):object
参数
array $map 映射关系,关联数组,此数组对少包含两个参数,最多4个,四个参数会对照传递个init
方法
string $domain 当前映射关系要绑定的域名,默认不指定表示所有域名都可以使用
示例
$vitex->setAppMap([
["app",dirname(__DIR__)],
"user" => ["user",dirname(__DIR__)]
]);
以上示例表示绑定了一个所有域名
通用的规则,当要访问的链接path第一段是user时会自动调用user的应用,其余时则会调用第一个没有指定键名的app应用。
$vitex->setAppMap([
["app",dirname(__DIR__)]
])->setAppMap([
["user",dirname("__DIR__")],
"api" => ["api",dirname(__DIR)]
],"user.test.com");
如上绑定了一个默认所有域名的规则,另外还给user.test.com域名单独绑定了两个规则,比如我访问 www.test.com时的请求都会被路由到app应用;如果访问user.test.com 都会路由到第二次绑定的路由中,如果第一段是api则会被路由到api应用,如果第一段不是api则都会路由到user应用。
初始化多应用的项目,具体功能可以参考init
方法,但是此方法会根据setAppMap
的规则进行路由的转换。
签名
multiInit():string
返回值
此方法会返回根据setAppMap设置的路由规则中被路由到的应用名。
示例
//注册应用映射规则参考setAppMap方法
$app = $this->multiInit();
//下面可以根据$app的不同加载不同的信息,如不同的中间件、不同的路由规则、不同的路由分组
swicth($app) {
case "user":
$vitex->get("/","User@info");
break;
case "app":
$vitex->group("/","Welcome")
break;
case "api"
$vitex->group("/","Index");
break;
}
这是一个多应用存在时的一种解决办法,当然还有直接分离的解决办法,可以参考多应用文档。
执行时间
框架Vitex初始化时会自动记录一个执行时间,入果需要获取从开始到当前位置的时间则直接输出 $vitex->execTime()
即可 输出的数字单位为毫秒.
如果需要计算从指定位置开始的时间则需要
$vitex->execTime("pos1"); //开始记录时间 A
echo $vitex->execTime("pos1"); //输出从A开始到当前输出的时间
签名
execTime($symbol="__start")
注册钩子函数,注册的钩子可以使用appHook方法来触发钩子函数执行
系统有两个保留的钩子,一个是sys.before.router在开始路由之前sys.after.router在路由结束滞后
签名
`hook(string $name, callable $call, integer $priority = 100) : object`
参数
string $name 钩子名称
callable $call 可执行的方法
integer $priority 执行的优先级,数字越大越提前
示例
`$vitex->hook('before.router',function(){echo 'before route';})`
`$vitex->hook('login',function(){echo 'islogin';})`
注入应用,可以在当前应用中注入其他的应用,也就是把其他的应用的命名空间加到本应用中,使得本应用可以直接访问注入的应用
例如当前A应用,如果要直接使用自动加载加载B应用那么就得把B应用注入到当前命名空间,此时使用此方法注入
$vitex->injectApp('app2'); // 注入与当前应用同目录的app2
$vitex->injectApp("app",'/home/www/user/'); 注入 指定目录中的 app应用到当前应用
执行指定的钩子名称所注册的所有方法
签名
`applyHook(string $name) `
参数
string $name 钩子名称
示例
`$vitex->applyHook('login')` 执行注册到login钩子的所有方法
获取指定的钩子名称所注册的所有方法或者如果不指定名称返回所有的注册方法
签名
`getHooks(string $name = null) : array`
参数
string $name 钩子的名字
示例
`$vitex->getHooks('login')`
`$vitex->getHooks()` 返回所有注册的函数(关联数组)
启用视图功能,系统会自动实例化View类,使之支持模板
签名
`view() : mixed`
示例
`$vitex->view()`
根据设定的数据直接输出指定的模板解析后的html数据
签名
`render(string $tpl, array $data = array(), integer $status = null) `
参数
string $tpl 模板名称
array $data 传递给模板的数据
integer $status 状态码,默认会输出200
示例
`$vitex->render('index',['title'=>'my site'])`
注册中间件,中间件分为两种级别,一种是应用级别的中间件,一种是路由级别的中间件。
预处理中间件
是在路由开始之前执行的一系列指定的方法。
预处理中间件 会按照和注册顺序相反的顺序逐个执行,详见中间件的开发规范。
路由中间件
是一种特殊的路由机制,他的执行和路由行为一致,执行顺序也和路由的注册执行顺序一致。
签名
`using($pattern, $call) : object`
参数
mixed $pattern 路由中间件时此参数为URL匹配段,应用级中间件时此参数为中间件的一个实例
mixed $call 要执行的中间件处理方法或者null(应用中间件时)
示例
`$vitex->using(new \vitex\middleware\Session())`
所有的预处理中间件(应用级中间件)必须要继承自 \vitex\middleware类
`$vitex->using('/',function($req,$res,$next){echo $req->query->name;})`
每一个中间件的方法都可以接受三个参数,request对象,response对象,一个执行下
一个匹配路由的next方法
直接执行中间件,在using方法中一般是全局范围内加载中间件,此方法可以在局部动态载入中间件. 可以在控制器或者其他可以获取到Vitex的地方直接执行,有效范围为当前执行到结束.
示例
$vitex->runMiddleware(new \vitex\middleware\Session())
注册路由分组
签名
`group(string $pattern, string $class,string $appName) : object`
参数
string $pattern 分组标识 url的一部分
string $class 分组对应的类的名字
string $appName 多个应用时可以指定应用的名字用于直接加载指定应用的路由文件
示例
`$vitex->group('/user','user')` 把所有 /user的请求都重定向到 user文件中
user文件的路径可以通过改变 router.group_path重新设定
按照不同的请求方式注册请求处理方法
当多于一个callable的参数时,最后一个callable当做处理请求的“请求处理器”
其余的callable都会当做匹配当前URL时执行的 中间件,而且中间件的执行要早于“请求处理器”的执行
详情请参考路由
签名
`get()`
参数
string/array $pattern 匹配的url规则,多个匹配规则时可以传递一个数组
[callable/array 可选参数,可以指定一个或者多个(数组)中间件来执行,相当于在当前pattern上调用using来注册中间件]
callable $call 匹配后执行的方法
示例
`$vitex->get('/',function(){echo 'index';})`
`$vitex->get('/user',function() use ($vitex){ $vitex->render('user');})`
可以使用:name的方式设置一个变量
`$vitex->post('/user/:id',function($req){ echo $req->params->id;})`
`$vitex->get('/article-:id',function(){echo $req->params->id;})`
如 get/post 等注册函数,此方法可以一次注册多个不同请求方式的函数
签名
`map()`
参数
string/array $method 需要注册的请求名 如 get,post 或者 ['get','post'] 可以指定多个
string/array $pattern 匹配的url规则,多个匹配规则时可以传递一个数组
[callable/array 可选参数,可以指定一个或者多个(数组)中间件来执行,相当于在当前pattern上调用using来注册中间件]
callable $call 匹配后执行的方法
示例
`$vitex->map('get/post',function(){echo 'map';})`
获取已经加载的中间件列表
检查一个中间件是否已经加载
签名
isLoadMiddleware(string $class):bool
示例
if(!$vitex->isLoadMiddleware('vitex\middleware\Session')){
$vitex->using(new \vitex\middleware\Session());
}
给路由设定一个别名
签名
setAlias(string $alias)
参数
string $alias 别名名称
根据路由别名获取一个注册的路由,如果是一个带有占位符的路由,则可以通过第二个参数传递相应的数据进行替换
签名
getByAlias(string $alias,array $data)
参数 string $alias 别名名称 array $data 数据
示例
$vitex->get('/home','Home@index')->setAlias('home')
echo $vitex->getByAlias('home'); // /home
$vitex->get('/home/:id@digit','Home@index')->setAlias('home')
echo $vitex->getByAlias('home'); // /home/:id@digit
echo $vitex->getByAlias('home',['id'=>123]); // /home/123
404页面,如果不指定$call则会触发执行默认或者已经设定(如果设定过)的notfound方法
签名
`notFound()`
参数
callable $call 无法路由时执行的方法
示例
`$vitex->notFound(function(){echo 'Not Found';})`
执行Vitex框架