流程架构图和流程视图的区别_php 框架 流程图

上一篇文章,总结了一个PHP框架的大致流程。

imooc类,作为整个框架的入口类,在index页面中,创建imooc对象,然后调用它的run()函数,开始运行框架。

run()函数中,通过route类对象,解析出对应的控制器$ctrl,以及控制器要执行的方法$action,并执行该方法。

indexCtrl控制器类中,它的$action函数中,实现HTML页面的渲染。

这就是一个简单的PHP框架的大致运行流程。接下来的内容,是在这个基本框架的基础上,不断的进行完善。

流程架构图和流程视图的区别_PHP_02

conf.php

文件地址:core\

目前框架中有些固定的信息,是保存在类文件中的,比如:

route.php路由类中,当页面URL没有输入任何的控制器、和action的信息时,自动默认的indexCtrl和index信息。

数据库连接时的用户名、密码、数据库的名称信息

但这些信息需要修改的时候,要修改对应的PHP文件,不是很方便。如果把这些信息,都提取出来,集中在一起,保存到一个叫做conf.php的文件,这样后续修改起来,会更加的轻松。

conf.php的作用是加载一些配置文件,这些配置文件里,只包含了一个简单的数组(配置数据),conf.php加载后,会把这些数组中的数据返回。返回的方法有两种:

get(变量名,配置文件名):返回配置文件中,对应名称的变量。

all(配置文件名):返回配置文件中,所有的变量。

另外,conf.php中的conf类是一个单利类,get()和all()都是静态方法,可以随时调用。

流程架构图和流程视图的区别_PHP_03

配置文件

文件路径:config\

前面所说的这些配置文件,都保存在config文件夹中,具体包括:route、cache、database、config、system等等。它们的共同特点,就是文件中只包含了一个存储配置信息的数组。例如route.php

//默认控制器和方法

return array(
'DEFAULT_CTRL'=>'index',
'DEFAULT_ACTION'=>'index',
'ROUTE'=>[
'doc'=>['index','doc'],
'blog'=>['index','blog']
]
);

然后要始终代码中的变量,通过conf::get(变量名,文件名),就可以轻松获取。

流程架构图和流程视图的区别_php 框架 流程图_04

view.php

通过配置文件,获取到了控制器的名称(indexCtrl.php),以及控制要执行的action(index),打开文件查看代码可以看到,代码非常的简单。只是调用了一个display()方法。

/**
* 示例控制器
*/
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做大的作用,就是实现代码的复用。

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()方法。

流程架构图和流程视图的区别_php 框架 流程图_05

其他工具

课程中在完善这个框架的时候,还使用了其他几个工具类:

composer:Composer是PHP中用来管理依赖(dependency)关系的工具,相当于一个包管理器,如npm。

medoo:Medoo是一个轻量级的PHP数据库框架。

twig:twig是一个PHP模板引擎。模板内的 变量 和 表达式 会在运行的时候被解析替换,标签(tags)会来控制模板的逻辑。

这些暂时不学了,以后用到的时候再学习吧。