最近某项目需要新增一个站点,由于之前使用的是Kohana框架,所以在此基础上学习及开发。
Kohana是一个基于MVC模型构建的PHP5框架,它的目标旨在安全,重量轻,且易于使用。目前最新的稳定版本是3.3.0。下载最新版本的Kohana的zip包后,解压后的文件目录如图所示:
对于我这个PHP入门汉,尽快上手是比较重要的。在我看来,学会使用Kohana需要理解和熟悉的主要分为四部分:1,Model View Controller;2,Cascading Filesystem;3,Request Flow;4,Routing。下面就分别介绍一下。
MVC的定义就不详细介绍了。在Kohana中,一个controller就是在models和views之间的class文件。当数据改变时controlller把信息传递给modle,相应的需要数据时,controller也会像model请求。当数据请求完毕后controller就将 数据交给view 来展示给用户。controller 是由 Request::execute() 调用的,不同的 request 根据Route策略调用不同的controller。Model管理着应用所需要的数据及行为,并对特定的请求进行响应。Model 负责管理应用的所有数据,对于数据的处理和管理也应由model负责。Controller和model都属于class,而view不是。View是包含了展示各方面信息的文件,通常来说view包含了HTML,CSS及Javascript,但是也可以是XML或者AJAX的JSON数据。使用view的主要目的是剥离信息展示和应用逻辑之间的耦合,这样便能轻松复用并写出清晰的代码。Kohana中的view依然是php文件,所以你可以随意编码,但是除了展示逻辑,其他的数据处理等逻辑还是交给model和controller吧。
Cascading Filesystem 字面意思是级联文件系统。Kohana文件系统是一个分层结构,像目录结构那样级联。在kohana中,这个分层结构(当一个文件通过Kohana::find_file被加载时,会使用)按照下面的顺序:1,应用路径。在index.php中,被定义为APPPATH,默认值是 application;2,模块路径。在 APPPATH/bootstrap.php中,通过Kohana::modules被设置为关联数组。数组中的每个值都可以按照在模块中定义的顺序被找到;3,系统路径。在index.php中,被定义为SYSPATH,默认值是system`。所有主要”core”文件和类都定义在这里。目录中的同名的文件,越靠近目录顶层,优先级越高。所以,同名的文件,可以通过放在高优先级的目录中,使其重载。下图说明了Kohana的文件系统工作方式:
Request Flow 将上面这些内从串联起来。在Kohana中,一个请求到来时,会按照下面的顺序执行:1,应用从index.php开始。首先设置application,module及system的路径,然后设置错误报告等级。如果Install文件存在则加载。最后执行APPPATH/booststrap.php;2,请求到达booststrap.php文件时,首先 加载Kohana的类文件,然后调用Kohana::init,并且附加上 Kohana_Config的reader 及Kohana_Log的writter。接下来依次调用Kohana::modules加载附加模块,Route::set定义应用路由,Request::instance 处理请求;3,当请求处理完毕后,将会返回到index.php并展示结果。
Routing 是Kohana提供的一个非常强大的路由系统。从本质上讲,路由提供了在url与你的controller和action之间的接口。用正确的路由,你可以做几乎所有的URL方案对应的几乎所有的控制器约定,你可以改变其中一个而不影响其他的路由。在上一段Request Flow中,一个请求被Request类处理,它会寻找一个匹配 Route,并载入适当的控制器来处理这一请求。在APPPATH/booststrap.php文件最底部可以看到一个默认的路由,代码如下:
12345 | Route::set( 'default' , '(<controller>(/<action>(/<id>)))' ) ->defaults( array ( 'controller' => 'welcome' , 'action' => 'index' , )); |
上述代码创建一个名为default的路由,它将匹配(<controller>(/<action>(/<id>)))格式的url。Route::set的参数包括name,uri,以及一个可选的数组regex 。Name必须是一个独一无二的字符串。如果不是,相同name的路由会覆盖之前的路由。name用于创建反向路由的URL ,或检查匹配的路由。Uri是一个字符串,表示应匹配的URL的格式。Kohana路由系统在匹配过程中使用Perl兼容的正则表达式。在项目中我们使用了默认的路由设置,只是修改 ‘controlller’ => ‘home’ 。关于路由的内容比较多,这里就不展开,详细的内容可以参考http://kohanaframework.org/3.3/guide/kohana/routing。
对于没怎么使用过框架开发PHP的小白,我感觉使用Kohana非常方便,只要理解上述四个概念,应该能够尽快上手开发一个简单的应用。当然想深入使用的话还是要花一定时间的,感兴趣的同学可以去他们的官网看看。
Kohana官网:http://www.kohanaframework.org/