目前公司使用的技术是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");

5.3 读取config
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');


其他资料:


上面只是平时工作所做的记录,后续更多详细介绍再补充。有错误之处,欢迎指正。


Logo

前往低代码交流专区

更多推荐