Kohana介绍
最近换了新公司使用的技术是PHP+kohana+vue,目前是现学现用。网上对Kohana的资料比较少,现在将平时学的记录下来。特点: HMVC,主要依赖于Cotroller、View,Model。3、请求验证请求是否来自内部if($this->internal != Request::instance()) {$this->internal = true;//请求来自
·
目前公司使用的技术是PHP+kohana+vue,之前没接触过PHP现在只能是现学现用。网上对Kohana的资料比较少,现在将平时学的记录下来。
什么是Kohana
Kohana是一个使用模型视图控制器架构模式的PHP5框架,即PHP5实现的MVC框架。
特点:
- HMVC,主要依赖于Cotroller、View,Model。
- Kohana附带了许多常用的附加工具(模块),如加密,验证,数据库访问等。
- 它提供了简单扩展默认值的可能性
- 允许使用其BSD许可构建商业应用程序
Kohana的标准(开箱即用)模块
以下是Kohana的一些开箱即用的模块。
- 身份验证:用户身份验证和授权。
- 缓存:缓存引擎的通用接口。
- Codebench:代码基准测试工具。
- 数据库:数据库不可知查询和结果管理。
- 图像:图像处理模块。
- ORM(对象关系映射器):用于对象关系映射的建模库。
- Unittest:单元测试模块。
Kohana的MVC视图控制器模型,用于将代码和逻辑结构分成组,在返回结果之前,请求会经历一个过程 - 类似于下面的示例。
(1) (2) (3)
Request ---> Parsing ---> Matching
[Data] .. [] >> .. [] > [] [] [] .. .. .>. .. . ........
(4) (5) (6)
Routing ---> Controller ---> Response
----- .. >> .. >> .. ../\ .. /\ [] >> [] >> [Data]
|| . ||
\/ . \/
Model View
1、控制器
Kohana控制器约定:
- 必须位于控制器目录,一般是application/classes/controller下
- 控制器文件名小写
- 控制器中的类必须继承Controller,且以大写'Controller_'开头,且类名与文件名关联。若文件名为info.php,则其内部类为Controller_Info。
- 控制内部内部外部访问的方法必须定义为public,且以'action_'开通。
- 给控制器输出信息方式即给$this->request->response
假如在application/classes/controller/有个info.php
class Controller_Info extends Controller {
public function action_index() {
$this->request->response = ' hello world';
}
}
访问 XXX/info/index 输出‘hello world’
2、View 视图层
View是php文件,包含css,html,js等文件。位置一般是在application/views下。
2.1 关联控制器和视图
一、在Controller中使用View::factory()来实例一个视图,然后赋值给request-response。
public function action_index() {
$this->request->response = View::factory('page/info')
}
二、使用视图View的render()方法手动显示结果。
public function action_index() {
$view = View::factory('page/info')->render();
$this->request->response = $view;
}
2.2 绑定数据到视图
假设info.php中
<h1> <?php echo $title?></h1>
<h2> <?php echo $date?></h2>
一、 分配数据到视图变量
public function action_index() {
$view = View::factory('page/info')->render();
$view->title = 'this is date';
$view->date = date('m/d/y');
$this->request->response = $view;
}
二、 在创建视图时直接将变量放入View::factory方法中
public function action_index() {
$da['title'] = 'this is date';
$da['date'] = date('m/d/y');
$this->request->response = View::factory('page/info', $da);
}
三、使用bind方式,将数据绑定到视图
public function action_index() {
$view = View::factory('page/info')->bind('date', $date)->bind('title', $title);
$title = 'this is date';
$date = date('m/d/y');
$this->request->response = $view;
}
四、使用set方法
public function action_index() {
$view = View::factory('page/info')->set('date', ''this is date')->set('title', date('m/d/y'));
$this->request->response = $view;
}
2.3 设置全局变量
主要是2个方式,View::set_global()和View::bind_global()
View::set_global('page_title', 'page title');
View""bind_global('page_title', 'page title');
3、请求
验证请求是否来自内部
if($this->internal != Request::instance()) {
$this->internal = true; //请求来自内部
}
获取参数:
query方式
$type = $this->request->query('type');
//或者使用
$params = $this->arg_filter($this->request->query(), ['type']);
post方式
$content_id = $this->request->param('id');
//或者使用
$params = $this->arg_filter($this->request->post(), ['id']);
4、路由 Route
4.1 路由设置
在application/bootstrap.php或在modules/模块/init.php中 使用
Route::
set
();设置;
每一个路由至少有一个默认default路由
Route::set('agent_info', '<controller>/<action>/<id>(/<agent>).<format>',
array(
'controller' => 'agent',
'action' => 'agent_info',
'format' => '(html|json)'
)
)->defaults(
array(
'controller' => 'main',
'action' => 'index',
'format' => 'html'
)
);
访问格式: http:xxx/agent_info/index.html 或 http://xxxx/
controller/action/id.format
即将xxxx/agent_info请求转发到控制器agent的agent_info 动作上,默认是将请求转发到main控制中的index动作上。
4.2 反向路由
根据Route::set('routeKey','uri') 自动生成URL链接。及允许改变路由的模式,并引用在控制器的俩端,Route::get('routerKey',uri(...));
例:
Route::set('demo-sample', 'products(/<category>(/<id>))')
->defaults(array(
'controller' => 'products',
'action' => 'index',
));
$route = Route::get('demo-sample', uri(array('category'=> box, 'id'=> 123)));
echo $route; // demo-sample/products/category/box/123
4.3 路由分页
路由分页必须在bootstrap.php中启用分页pagination模块
$pagination = Pagination::factory(array(
'paging'=> array('currentPageNum'=> 1, 'key'=>'first'),
'totalCount'=> '15',
'totalPageNum'=>'3'
));
5、session,cookie,config
Kohana提供Cookie,Session类方便进行操作,同时能便捷的读取配置文件
5.1 Session
Session可设置不同的适配器,及设置session保存的位置包括native、cookie、database。默认使用native适配器。
- native: 将session数据放在web服务器上,默认情况
- cookie: 将session数据放在一个局部cookie中
- database: 将session数据放在指定数据库中
//设置
Session::instance()->set('key_name', value);
//取值
$value = Session::instance()->get('key_name', 'default_value');
//删除
Session::instance()->delete('key_name');
//cookie适配器级别Session
Session::instance('cookie')->set('key_name', 'default_value');
//database适配器级别Session,,需在database中建立相应表结构
Session::instance('database')->set('key_name', 'default_value');
5.2 cookie
//设置
Cookie::set('key_name', value);
Cookie::$expiration = 4320;
Cookie::$path = '/';
Cookie:$domain = '.tf.com';
//取值
$value = Cookie::get('key_name', 'default_value');
//删除
Cookie::delete("key_name");
在
application/bootstrap.php中可以通过kohana::$config 来设置系统配置。
/**
* 设置输出日志目录
*/
Kohana::$log->attach(new Log_File(APPPATH.'logs'));
/**
* 添加系统配置路径
*/
Kohana::$config->attach(new Config_File('/src/application/config/');
/**
* 获取系统列表配置下的信息
*/
$list_config = Kohana::$config->load('system_list')->get('info');
其他资料:
上面只是平时工作所做的记录,后续更多详细介绍再补充。有错误之处,欢迎指正。
更多推荐
已为社区贡献4条内容
所有评论(0)