一个简单的PHP框架的业务流程(下)

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

  1. imooc类,作为整个框架的入口类,在index页面中,创建imooc对象,然后调用它的run()函数,开始运行框架。
  2. run()函数中,通过route类对象,解析出对应的控制器$ctrl,以及控制器要执行的方法$action,并执行该方法。
  3. indexCtrl控制器类中,它的$action函数中,实现HTML页面的渲染。

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

1

conf.php

文件地址:core\

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

  • route.php路由类中,当页面URL没有输入任何的控制器、和action的信息时,自动默认的indexCtrl和index信息。
  • 数据库连接时的用户名、密码、数据库的名称信息

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

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

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

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

2

配置文件

文件路径: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(变量名,文件名),就可以轻松获取。

3

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

4

其他工具

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

  • composer:Composer是PHP中用来管理依赖(dependency)关系的工具,相当于一个包管理器,如npm。
  • medoo:Medoo是一个轻量级的PHP数据库框架。
  • twig:twig是一个PHP模板引擎。模板内的 变量 和 表达式 会在运行的时候被解析替换,标签(tags)会来控制模板的逻辑。

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

联系作者

公众号:拉小登 | 微博:拉登Dony | B站:拉小登Excel

文章分类 > PHP

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注