最近正在开发一个PHP的开发框架(ibframework),所以把开发过程中的一些技术细节做一下分享,让你可以轻松编写自己的专属框架(很久没写文章了,为了大V,无奈啊)。
目前框架还正在开发中,参考原型是(YII/CI/Brophp等开源框架),代码我都会及时同步到github,代码还有很多的不足之处,希望能跟各位PHP爱好者多多交流。托管地址:https://github.com/xstudio/ibframework
今天主要简单阐述一个Framework的主入口文件(index.php)和MVC模式的实现。
一般一个框架的主入口文件是网站根目录的index.php,用户每次都要访问的。这样在index.php中就可以根据用户请求参数实例化不同的控制器类。例如一个简单的网站目录结构。
包含一个主入口文件index.php,基本的MVC结构(models/controllers/views)。
主入口文件中,我们只需要处理一下用户提交的参数,假如用c代表应该实例化的控制器类,a代表应该执行控制器中的action。
这样我们就可以在models目录下编写一个TestModel.php的模型文件,打印一个helloworld,一会会在控制器中实例化这个model类。
接着在views目录下编写一个test.php的视图文件,用于显示一会控制器要分配过来的变量$str
最后在controllers目录下编写一个控制器类TestController.php,实例化model类,并且分配views。
注:本文旨在简单阐述mvc的实现原理,所以一切都是基于简单。例如一个完整的框架中会有一个Controller的父类,这样子类集成后就可以调用父类的render方法分配视图了。还有models中的类文件一般会预先加载好或者写到__autoload中,不用再在控制器中包含;为防止不同控制器的视图文件重名,一般会在views目录建一个跟控制器重名的文件夹作区分;框架会有一个单独的文件夹,包含系统的核心类等等。这里都不再赘述,有兴趣的朋友可以学习一下一些开源的框架用法。