资讯专栏INFORMATION COLUMN

从零开始打造自己的PHP框架――第2章

daydream / 1263人阅读

摘要:命名空间的作用解决重名问题。不同的命名空间中,可以存在相同类名和函数名。完全限定名称,或包含了全局前缀操作符的名称,例如,或。源码分享书签从零开始打造自己的框架使用命名空间基础使用命名空间后备全局函数常量基础安装进阶安装

目标

本篇,我们来实现加载控制器、数据查询和页面渲染。

原文地址:http://www.voidking.com/2017/...

加载控制器 控制器

在app目录下,新建ctrl目录,ctrl目录下新建indexCtrl.php文件,内容如下:


调用控制器

在根目录下的index.php文件中,继续添加:

include CORE."/autoload.php";
spl_autoload_register("coreautoload::load");
$route = new core
oute();

$ctrl = $route->ctrl;
$action = $route->action;
$params = $route->params;
$ctrl_file = APP."/ctrl/".$ctrl."Ctrl.php";
$ctrl_class = "appctrl".$ctrl."Ctrl";
if(is_file($ctrl_file)){
    include $ctrl_file;
    $ctrl_obj = new $ctrl_class;
    $ctrl_obj->$action();
}else {
    throw new Exception("找不到控制器".$ctrl_file);
}

访问地址 http://vkphp.dev ,即可看到“index ctrl”。

数据查询

1、在mysql中,新建数据库vkphp。

2、在vkphp数据库中,新建表vk_user,字段包括id、username和password。

3、在common文件夹下,新建db.php,内容如下:

getMessage();
        }
    }
}

4、在indexCtrl.php中,添加:

public function data(){
    $db = new corecommondb();
    $sql = "select * from vk_user";
    $result = $db->query($sql);
    p($result);
    p($result->fetchAll());
}

访问地址 http://vkphp.dev/index/data ,即可看到从数据库中查询出的数据。

页面渲染

页面渲染,主要有两部分工作:赋值和显示。我们需要实现两个函数:assign和display。

1、在app目录下新建view目录,view目录下新建index目录,index目录中新建render.html,内容如下:




    
    Render


    

第一个视图

用户名:

2、在core目录中,添加render.php,内容如下:

params[$name] = $value;
    }

    public function display($file){
        $file = APP."/view/".$file;
        if(is_file($file)){
            extract($this->params); //把数组变成变量
            include $file;
        }
    }
}

3、修改indexCtrl.php如下:

assign("username","voidking");
        $this->display("index/render.html");
    }
}

访问地址 http://vkphp.dev/index/render ,即可看到渲染出的页面。

页面渲染进阶

直接在页面echo,难以体现水平,我们来安装一个模板引擎――smarty。

命名空间

接下来smarty的使用,牵涉到命名空间这个知识点,在此学习一下。

首先声明:命名空间和文件路径没有关系,没有关系,没有关系!虽然,在使用命名空间时经常参考文件路径,但是,它们没有必然关系。

命名空间的作用:解决重名问题。不同的命名空间中,可以存在相同类名和函数名。我们在使用一个类和函数时,必须明确指出使用的是哪一个命名空间中的类和函数。

上文我们说到,在文件系统中访问一个文件有三种方式,PHP命名空间中的元素使用同样的原理。例如,类名可以通过三种方式引用:

1、非限定名称,或不包含前缀的类名称,例如 $a=new foo();foo::staticmethod(); 。如果当前命名空间是 currentnamespace,foo 将被解析为 currentnamespacefoo ;如果当前没有指定命名空间,则foo会被解析为 foo
2、限定名称,或包含前缀的名称,例如 $a = new subnamespacefoo();subnamespacefoo::staticmethod(); 。如果当前的命名空间是 currentnamespace,则 foo 会被解析为 currentnamespacesubnamespacefoo ;如果当前没有指定命名空间,foo 会被解析为subnamespacefoo
3、完全限定名称,或包含了全局前缀操作符的名称,例如,$a = new currentnamespacefoo();currentnamespacefoo::staticmethod();。在这种情况下,foo 总是被解析为代码中的文字名(literal name) currentnamespacefoo

下面举个栗子:

下载安装smarty

1、访问smarty官方下载 ,下载smarty,小编下载的是3.1.30版本。

2、在根目录下新建lib,解压smarty到lib目录下,重命名文件夹为smarty。

使用smarty

1、在app目录下新建smarty目录,smarty目录下新建templates、template_c、configs、cache四个目录。

2、在templates目录下新建index目录,index目录中新建render2.html,内容如下:




    
    Smarty


    

第一个Smarty页面

用户名:{{$username}}

3、修改core目录下的render.php如下:

smarty = new Smarty();

        $this->smarty->setTemplateDir(APP."/smarty/templates/");
        $this->smarty->setCompileDir(APP."/smarty/templates_c/");
        $this->smarty->setConfigDir(APP."/smarty/configs/");
        $this->smarty->setCacheDir(APP."/smarty/cache/");
    }

    public $params = array();
    public function assign($name,$value){
        $this->params[$name] = $value;
    }

    public function display($file){
        $file = APP."/view/".$file;
        if(is_file($file)){
            extract($this->params); //把数组变成变量
            include $file;
        }
    }
}

4、修改indexCtrl.php如下:

smarty->assign("username","voidking");
        $this->smarty->display("index/render2.html");
    }
}

访问地址 http://vkphp.dev/index/render2 ,即可看到渲染出的页面。

源码分享

https://github.com/voidking/v...

书签

从零开始打造自己的PHP框架

使用命名空间:基础

使用命名空间:后备全局函数/常量

smarty基础安装

smarty进阶安装

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/25856.html

相关文章

  • 从零开始打造自己PHP框架——6

    摘要:前言第到章,我们完成了一个属于自己的框架,麻雀虽小五脏俱全。接下来,我们使用框架开发一个迷你项目书签收藏。内包含框架的核心文件。源码分享书签从零开始打造自己的框架与之详解 前言 第0到5章,我们完成了一个属于自己的php框架,麻雀虽小五脏俱全。接下来,我们使用vkphp框架开发一个迷你项目——书签收藏。在开发过程中,也许会遇到很多问题,这时候我们就可以对框架进行调整,使之更加完善。 系...

    shusen 评论0 收藏0
  • 从零开始打造自己PHP框架——0

    摘要:市场上已经有了这么多好的框架,为什么还要开发自己的框架答假装大神。为了在装神的道路上走的更远,小编决定开发一个自己的框架,命名为。源码分享书签从零开始打造自己的框架 前言 使用过thinkphp和yii,涉猎过shopnc。市场上已经有了这么多好的框架,为什么还要开发自己的框架?答:假装大神。为了在装神的道路上走的更远,小编决定开发一个自己的php框架,命名为vkphp。 原文地址:h...

    妤锋シ 评论0 收藏0
  • 从零开始打造自己PHP框架——4

    摘要:本篇,我们就在自己的项目中使用来进行依赖管理。输入,即可安装依赖到目录中,并且自动生成和。安装依赖,提示从提示可以看出,读取的是中的依赖,而不是最新的。访问,正常工作。源码分享书签从零开始打造自己的框架中文网中文文档 Composer Composer 是 PHP5.3以上 的一个依赖管理工具。它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们。Composer 不是一个包管...

    madthumb 评论0 收藏0
  • 从零开始打造自己PHP框架——5

    摘要:小结至此,整个框架已经基本完成。接下来,我们会开发一个迷你项目,在开发的过程中,测试并改进我们的框架。源码分享书签从零开始打造自己的框架官方文档中文文档 目标 使用medoo插件来连接和操作数据库。 原文链接:http://www.voidking.com/2017/... medoo基础 安装medoo 1、在composer中添加依赖: catfan/medoo: * 2、更新依赖...

    svtter 评论0 收藏0
  • 从零开始打造自己PHP框架——3

    摘要:内包含框架的核心文件。在目录中,新建,内容如下判断文件是否存在判断配置是否存在没有配置项找不到配置文件找不到配置文件配置类在目录中,新建配置文件和。使用修改目录中的和。源码分享书签从零开始打造自己的框架 目标 本篇,我们的目标有三个: 调整项目结构 加载配置类 添加日志类 原文地址:http://www.voidking.com/2017/... 调整项目结构 vkphp ├─ap...

    fengxiuping 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<