一个简单的PHP框架的业务流程(下)
上一篇文章,总结了一个PHP框架的大致流程。
- imooc类,作为整个框架的入口类,在index页面中,创建imooc对象,然后调用它的run()函数,开始运行框架。
- run()函数中,通过route类对象,解析出对应的控制器$ctrl,以及控制器要执行的方法$action,并执行该方法。
- indexCtrl控制器类中,它的$action函数中,实现HTML页面的渲染。
这就是一个简单的PHP框架的大致运行流程。接下来的内容,是在这个基本框架的基础上,不断的进行完善。
conf.php
文件地址:core\
目前框架中有些固定的信息,是保存在类文件中的,比如:
- route.php路由类中,当页面URL没有输入任何的控制器、和action的信息时,自动默认的indexCtrl和index信息。
- 数据库连接时的用户名、密码、数据库的名称信息
但这些信息需要修改的时候,要修改对应的PHP文件,不是很方便。如果把这些信息,都提取出来,集中在一起,保存到一个叫做conf.php的文件,这样后续修改起来,会更加的轻松。
conf.php的作用是加载一些配置文件,这些配置文件里,只包含了一个简单的数组(配置数据),conf.php加载后,会把这些数组中的数据返回。返回的方法有两种:
- get(变量名,配置文件名):返回配置文件中,对应名称的变量。
- all(配置文件名):返回配置文件中,所有的变量。
另外,conf.php中的conf类是一个单利类,get()和all()都是静态方法,可以随时调用。
配置文件
文件路径:config\
前面所说的这些配置文件,都保存在config文件夹中,具体包括:route、cache、database、config、system等等。它们的共同特点,就是文件中只包含了一个存储配置信息的数组。例如route.php
<?php //默认控制器和方法 return array( 'DEFAULT_CTRL'=>'index', 'DEFAULT_ACTION'=>'index', 'ROUTE'=>[ 'doc'=>['index','doc'], 'blog'=>['index','blog'] ] );
然后要始终代码中的变量,通过conf::get(变量名,文件名),就可以轻松获取。
view.php
通过配置文件,获取到了控制器的名称(indexCtrl.php),以及控制要执行的action(index),打开文件查看代码可以看到,代码非常的简单。只是调用了一个display()方法。
<?php /** * 示例控制器 */ namespace app\ctrl; use ppphp\view; class indexCtrl { use view; public function index() { $this->display('index/index.html'); } }
不过这个display()方法并没有再indexCtrl.php这个文件中声明,还是通过use view,载入了外部trait。
trait的是声明和类相似,不过使用的时候,直接通过use yourTrait,就可以把trait中的代码“copy”过来。所以trait做大的作用,就是实现代码的复用。
<?php namespace ppphp; trait view { /** * 为模板对象赋值 */ public function assign($name, $data) { $this->assign[$name] = $data; } /** * 用于在控制器中加载一个模板文件 */ public function display($file) { echo "hello i am running"; //include(PPPHP."/app/views/index/index.html"); exit; if (is_file(APP . 'views/' . $file)) { \Twig_Autoloader::register(); $loader = new \Twig_Loader_Filesystem(APP . 'views/'); $twig = new \Twig_Environment($loader, [ 'cache' => PPPHP . '/log/twig_cache', 'debug' => DEBUG, ]); $template = $twig->loadTemplate($file); $template->display($this->assign ? $this->assign : []); } else { if (DEBUG) { throw new \Exception($file . '是一个不存在的模板文件'); } else { show404(); } } } }
通过上面的代码可以看到,因为view里包含了一个display()方法,所以indexCtr.php在use了view之后,可以直接使用display()方法。
其他工具
课程中在完善这个框架的时候,还使用了其他几个工具类:
- composer:Composer是PHP中用来管理依赖(dependency)关系的工具,相当于一个包管理器,如npm。
- medoo:Medoo是一个轻量级的PHP数据库框架。
- twig:twig是一个PHP模板引擎。模板内的 变量 和 表达式 会在运行的时候被解析替换,标签(tags)会来控制模板的逻辑。
这些暂时不学了,以后用到的时候再学习吧。
联系作者