模仿写一个小型网站框架

之前的博文中讲述MVC的时候,介绍了美女同学的简单框架one。本来就打算要在美女框架的基础上有所改进,至少能够独立搭出一个成型的小网站出来(有界面交互,有db读写等)。刚好最近工作内容不同,故借此机会搭建了一个小型的网站。

网站非常简单,框架大部分思想还是借鉴sunny美女。希望后续自己能够使用比较流行的github搭建自己的博客网站,或是采用nodejs+一些主题。总之需要改进的空间有很多,关键在于耐心和求知欲。
 
1. 代码架构-----各个部分的作用以及相关的依赖
sunny美女的框架的结构(如下图所示)确实简洁明了。
美女同学没有使用模版引擎,而是自己写了一个view类,也没有使用其他的mysql访问类,而是自己写一个mysql类来访问db。这样写的好处是框架比较轻,也方便学习代码阅读者了解框架细节。
但是如果要用这个框架搭建一个网站,就会比较难用。
所以我在美女同学的基础上引进了smarty的模版引擎,PDO的访问类,并且为了更加成型,参照以前做过的一个管理碗盏,做了一个主界面,写一些简单的js,通过js将每次用户请求访问的数据在一个man div中显示出来。
改进后的代码结构如下:
 
  • index.php是网站的统一入口文件。获取用户的请求参数。
  • library是框架所依赖的一些库。
  • core.php是入口文件调用的主函数Core::run($requestParms)是在本文件中实现的。本文件主要实现了加载依赖文件loadFile;,初始化控制器以初始化view对象(initController); 解析请求参数,获取路由控制信息(Router),通过c参数知道调用哪个控制类,同个a参数知道调用哪个控制类的哪个函数。
  • smarty文件夹就是所依赖的smarty模版引擎。
  • logs 可以存放运行的相关日志。
  • model主要实现相关数据的读写和逻辑处理类
  • static整个亚太存储静态文件。
  • view存储的是一些视图模版文件,可以通过smarty对模版文件某些变量赋值,并且将界面display出来。
 
2. 数据流---主要参照MVC框架的介绍
解析url获取用户请求,将用户请求的参数,转化为相应的controller类的相应action函数,调用该函数请求访问data层,获取处理后的数据,填充到view层,然后渲染在前端显示。
其实这种有很多细节:
  • 如何解析url将域名转化为服务器ip,并且找到服务器服务程序所在的目录
  • 用户如何通过url将请求参数传回给服务端
  • html,css,js之间如何相互协作,将DOM渲染出来
  • 服务端将处理的结果如何返回给客户端浏览器显示
 
3. 源代码----提交到我的github
代码放在github上,大家可以参考。
运行效果图如下:
 
4. 小改进:
(1)通过PDO访问数据库
$dsn = "mysql:host={$g_databases[$dbname]['host']};port={$g_databases[$dbname]['port']};dbname={$g_databases[$dbname]['dbname']}";
$db = new PDO($dsn, $g_databases[$dbname]['usr'], $g_databases[$dbname]['pwd'], array(PDO::ATTR_PERSISTENT => true));
$db->exec("SET NAMES 'utf8';"); // must need to set names utf8, if not, Chinese will be wrong
(2)使用smarty的模版引擎
添加了smarty_view访问的baseController类,去掉了library中的controller类和model类
<?php
class baseController
{
    protected $mDefLang = 'CN';
    protected $mView = null;
    protected $mParams = null;
    function __construct($params)
    {
        // 这个需要考虑view,model-----依照最简单的去写
        $this->mView = new View_Smarty();
        $this->mView->caching = false;
        $this->mParams = $params;
    }
}
 
5. 感谢
主要参照了美女sunny的github---一个简单的php框架-----https://github.com/linsunny/one
参照了之前刚入职做的一个管理网站的架构对上述框架进行精简
参照了刚入职做的管理网站的主页模版。
原文地址:https://www.cnblogs.com/TsingLo/p/5125047.html