首页 php教程 php手册 PHP MVC 从零学起(2)

PHP MVC 从零学起(2)

Jun 06, 2016 pm 07:35 PM
mvc php 编写 自己的

PHPMVC从零学起,带你编写自己的框架。 想拥有属于自己的框架吗?来吧,带你装B,带你飞。 项目默认访问:http://虚拟域名/index.php?mod=mainnbsp;MVC 第2集,配置smarty模版引擎、过滤HTTP请求防止注入 目录结构: application ------cache ------component

PHP MVC 从零学起,带你编写自己的框架。
想拥有属于自己的框架吗?来吧,带你装B,带你飞。
项目默认访问:http://虚拟域名/index.php?mod=main&act=index

第1集,简单入门 MVC
第2集,配置smarty模版引擎、 过滤HTTP请求防止注入


目录结构:
application
------cache
------components
------------controller.php
------------functions.php
------configs
------------config.php
------controllers
------------main.php
------views
------------default
------------------index.php
plugin
------smarty
index.php
<?php
if(!defined('MVC_PATH')){
    exit('Access Denied');
}

class controller {
    
    public $tpl; // 模版对象
    public $config; // 配置对象
    
    /**
     * 初始化
     */
    public function init()
    {
        $this->initConfig();
        $this->initViews();
    }
    
    /**
     * 加载配置
     */
    public function initConfig()
    {
        session_start();
        require CONFIGS_PATH . '/config.php';
        $this->config = $config;
    }
    
    /**
     * 加载smarty
     */
    public function initViews()
    {
        require PLUGIN_PATH . '/smarty/Smarty.class.php';
        $this->tpl = new Smarty();
        $data = $this->config['smarty'];
        foreach ($data as $key => $val) {
            $this->tpl->$key = $val;
        }
    }
    
    /**
     * smarty同名方法assign
     * 
     * @param string $tpl_var
     * @param mixed $value
     */
    public function assign($tpl_var, $value = null)
    {
        $this->tpl->assign($tpl_var, $value);
    }

    /**
     * smarty同名方法display
     * 
     * @param string $resource_name
     * @param string $cache_id
     * @param string $compile_id
     */
    public function display($resource_name, $cache_id = null, $compile_id = null)
    {
        $this->tpl->display($resource_name, $cache_id, $compile_id);
    }
    
}
登录后复制
<?php
/* Smarty配置 */
$config['smarty']['left_delimiter'] = '<{';
$config['smarty']['right_delimiter'] = '}>';
$config['smarty']['template_dir'] = VIEWS_PATH . '/default';
$config['smarty']['compile_dir'] = CACHE_PATH . '/smarty/template_c';
$config['smarty']['cache_dir'] = CACHE_PATH . '/smarty/cache_c';
$config['smarty']['caching'] = false;
$config['smarty']['cache_lifetime'] = 3600;
$config['smarty']['debugging'] = false;
?>
登录后复制
<?php

class main extends controller {

    public function __construct(){
        parent::init();    
    }
    
    public function index(){
        $this->assign('hi', 'holle smarty!');
        $this->display('index.html');
    }
}
?>
登录后复制
<?php
header('Content-type: text/html; charset=utf-8');
date_default_timezone_set('Asia/Shanghai');
error_reporting(E_ALL ^ E_NOTICE);

// 定义路径
define('MVC_PATH', dirname(__FILE__));
define('PLUGIN_PATH', MVC_PATH . '/plugin');
define('SMARTY_PATH', PLUGIN_PATH . '/smarty');
define('APPLICATION_PATH', MVC_PATH . '/application');
define('COMPONENTS_PATH', APPLICATION_PATH . '/components');
define('CONTROLLERS_PATH', APPLICATION_PATH . '/controllers');
define('VIEWS_PATH', APPLICATION_PATH . '/views');
define('CONFIGS_PATH', APPLICATION_PATH . '/configs');
define('CACHE_PATH', APPLICATION_PATH . '/cache');

require_once COMPONENTS_PATH . '/functions.php';      //加载函数类
require_once COMPONENTS_PATH . '/controller.php';    //加载主控制器


/**
 * 过滤特殊符号
 * 该方法在GBK数据表下有漏洞
 */
foreach(array('_REQUEST', '_GET', '_POST', '_COOKIE', '_SERVER') as $value) {
    foreach(${$value} as $k => $v){
        ${$value}[$k] = func::saddslashes($v);
    }
    unset($value);
}


$mod = $_REQUEST['mod'] = !empty($_REQUEST['mod']) ? $_REQUEST['mod'] : 'main';
$act = $_REQUEST['act'] = !empty($_REQUEST['act']) ? $_REQUEST['act'] : 'index';

$controller_file = CONTROLLERS_PATH . '/' . $mod . '.php';
if(!file_exists($controller_file)){
    die('没有找到对应的程序文件');
}
require $controller_file;
$controller = new $mod();
$controller->$act();
?>
登录后复制
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章标签

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

适用于 Ubuntu 和 Debian 的 PHP 8.4 安装和升级指南 适用于 Ubuntu 和 Debian 的 PHP 8.4 安装和升级指南 Dec 24, 2024 pm 04:42 PM

适用于 Ubuntu 和 Debian 的 PHP 8.4 安装和升级指南

CakePHP 日期和时间 CakePHP 日期和时间 Sep 10, 2024 pm 05:27 PM

CakePHP 日期和时间

CakePHP 项目配置 CakePHP 项目配置 Sep 10, 2024 pm 05:25 PM

CakePHP 项目配置

CakePHP 文件上传 CakePHP 文件上传 Sep 10, 2024 pm 05:27 PM

CakePHP 文件上传

CakePHP 路由 CakePHP 路由 Sep 10, 2024 pm 05:25 PM

CakePHP 路由

讨论 CakePHP 讨论 CakePHP Sep 10, 2024 pm 05:28 PM

讨论 CakePHP

CakePHP 快速指南 CakePHP 快速指南 Sep 10, 2024 pm 05:27 PM

CakePHP 快速指南

如何设置 Visual Studio Code (VS Code) 进行 PHP 开发 如何设置 Visual Studio Code (VS Code) 进行 PHP 开发 Dec 20, 2024 am 11:31 AM

如何设置 Visual Studio Code (VS Code) 进行 PHP 开发

See all articles