![logo](https://i-blog.csdnimg.cn/blog_migrate/8f20b9b366bcf7fe6287861132c0404c.png)
控制器
控制器说明
OneFox控制器均放在应用目录下的controller目录;控制器的命名与类名相同、且首字母大写;自定义控制器请继承于框架核心控制器onefox\Controller。
控制器有两种模式,一种是模块模式,另一种无模块模式;在入口文件配置MODULE_MODE可开启或关闭模块模式,模块模式默认开启。
开启模块模式意味着在controller目录下有模块目录,模块目录下才是控制器文件,如下:
├─controller controller目录
│ ├─index 模块目录
│ │ ├─Index.php 控制器
关闭模块模式,目录结构如下:
├─controller controller目录
│ ├─Index.php 控制器
控制器中的方法请以Action为后缀,如indexAction。
特别说明:默认模块名index(如果开启模块模式),默认控制器名Index,默认方法名index
路由与参数
OneFox提供一个简单的路由,即根据URL中PATH信息定位控制器。
开启模块模式后,形如:http://www.xxx.com/mtest/ctest/atest的URL会路由到模块mtest下的ctest控制器中的atest方法。若关闭模块模式,那么去掉mtest后可以路由到ctest控制器中的atest方法。
URL中可添加PATH形式的参数,如:http://www.xxx.com/mtest/ctest/atest/ptest/test,URL中ptest为参数名、test为参数值。
特别说明:如果控制器不想被路由到,使用抽象类即可
模板
为了使用方便,OneFox没有使用模板语法,直接PHP内嵌HTML中,省去了学习模板语法的成本。
模板请放在应用目录下的tpl目录,且子目录结构应该与控制器的目录一一对应。举个栗子:开启模块模式的默认控制器对应的模板
├─tpl controller目录
│ ├─index 模块目录
│ │ ├─index.php 模板文件
从上面的目录结构可以看出,模板文件是以php为后缀的;与控制器文件名不同的是模板文件名需要小写。
引入其他模板
<?php
$this->import('dir_name/tpl_name', array('param_key'=>'param_value'));
需要注意的是可以通过数组将本模板的参数传递给引入的模板。
模型
模型说明
模型在应用目录下model目录中,模型的命名根据您自己的喜好,我建议是后缀加上Model,如:TestModel.php;模型中的目录结构可以多级。
自定义模型请继承于onefox\Model,直接上代码说明
<?php
namespace model;
use onefox\Model;
class TestModel extends Model {
//数据库配置,这个一定要设置,对应的名称在database.php中
protected $dbConfig = 'test';
//对应的表名,这个可以不设置
protected $table = 'test';
public function insertTest() {
//这个是访问数据库的方法,暂没有提供连贯操作
return $this->db->query('select * from `posts`');
}
}
数据库说明
数据库配置直接读取config/database.php,事先配置好即可。
DB类中常用方法:
<?php
/**
* 执行sql语句,如select, insert, update
* 示例:
* select: $db_obj->query('select * from `test` where `id`=:id', array('id'=>1))
* delete: $db_obj->query('delete from `test` where `id`=:id', array('id'=>1))
* insert: $db_obj->query('insert into `test`(name,age) values(:name,:age)', array('name'=>'ryan','age'=>20))
* update: $db_obj->query('update `test` set name=:name where `id`=:id', array('name'=>'ryan', 'id'=>7))
* @param string $query sql语句
* @param array $params 参数
* @param int $fetchmode 返回数据的模式,一般默认即可
* @return 数据list
*/
public function query($query, $params = null, $fetchmode = \PDO::FETCH_ASSOC){//...}
/**
* 返回一行
* 示例: $db_obj->row('select * from `test` where `id`=:id', array('id'=>7))
* @param string $query sql语句
* @param array $params 参数
* @param int $fetchmode 返回数据的模式,一般默认即可
* @return
*/
public function row($query, $params = null, $fetchmode = \PDO::FETCH_ASSOC){//...}
更多方法参见onefox\DB
Model中公共方法
- genInsertSql:生成插入语句
- genUpdateSql:生成更新语句
- insert:通用插入方法
类库
应用类库
应用类库在应用目录下的lib中,应用类库主要为本应用提供通用服务。
扩展类库
扩展类库在onefox同级目录的class目录下,这样设置方便其他应用调用。
还有一个需要注意的是,设置了扩展类库,在命名空间上是不需要命名根目录的,如:扩展类库下的Service类在Service目录下
<?php
namespace Service;
class Service {
//code...
}
从例子中可以看出,命名空间上是不需要加”class”目录的名称的。
特别说明:使用应用类库或扩展类库,不建议将类直接写到类库的根目录下,最好有二级目录区分不同服务
自定义函数库
自定义函数库在应用目录的function目录下,默认的文件名称为func.php。
可根据需要调整目录及文件名,分别就该FUNC_PATH、FUNC_NAME即可。
CLI
在应用目录的daemon目录中,放相关命令行执行文件,一定注意的是,每个执行文件一定要引入loader.php