PHP简单项目搭建

项目结构

项目结构.png
  • application:应用程序目录
  • framework:框架目录
  • public:前台静态资源目录
  • index.php:入口文件,这就是单一的入口
  • config:配置文件目录
  • controllers:控制器目录
  • models:模型目录
  • views:视图目录
  • admin:后台控制器(视图)目录
  • home:前台控制器(视图)目录
  • core:框架核心类,运行框架必不可少
  • database:数据库驱动类目录,存放数据驱动类,如mysql类,pdo类
  • helpers:辅助函数目录
  • libraries: 库目录,存放工具类如upload类,image类

定义核心启动类

<?php
//核心启动类
class Framework{
    //让项目启动起来
    public static function run(){
        //echo "running...";
        self::init();
        self::autoload();
        self::router();
    }

    //初始化方法
    public static function init(){
        //定义路径,获取当前工作路径 getcwd()
        define("DS", DIRECTORY_SEPARATOR);
        define("ROOT", getcwd() . DS); //项目根目录

        define("APP_PATH", ROOT . "application" . DS);
        define("FRAMEWORK_PATH", ROOT . "framework" .DS);
        define("PUBLIC_PATH", ROOT . "public" . DS);
        
        define("MODEL_PATH", APP_PATH . "models" . DS);
        define("VIEW_PATH", APP_PATH . "views" . DS);
        define("CONTROLLER_PATH", APP_PATH . "controllers" .DS);
        define("CONFIG_PATH", APP_PATH . "config" .DS);
        
        define("CORE_PATH", FRAMEWORK_PATH . "core" .DS);
        define("DB_PATH", FRAMEWORK_PATH . "database" . DS);
        define("HELPER_PATH", FRAMEWORK_PATH . "helpers" . DS);
        define("LIB_PATH", FRAMEWORK_PATH . "libraries" .DS);
        
        //前后台的控制器和视图目录怎么定义呢?,解析url中的参数,可以确定具体的路径
        //就是根据参数找到相应的php文件
        define("PLATFORM", isset($_REQUEST['p']) ? $_REQUEST['p'] :"home");
        define("CONTROLLER", isset($_REQUEST['c']) ? ucfirst($_REQUEST['c']) :"Index");
        define("ACTION", isset($_REQUEST['a']) ? $_REQUEST['a'] :"index");
        define("CUR_CONTROLLER_PATH", CONTROLLER_PATH . PLATFORM . DS);
        define("CUR_VIEW_PATH", VIEW_PATH . PLATFORM . DS);

    }

    //路由方法
    public static function router(){
        //确定类名和方法名
        $controller_name = CONTROLLER . "Controller"; //如GoodsController
        $action_name = ACTION . "Action";  //如addAction
        //实例化控制器,然后调用相应的方法
        $controller = new $controller_name;
        $controller->$action_name();
    }

    //注册加载方法
    public static function autoload(){
        spl_autoload_register(array(__CLASS__,"load"));
    }

    //加载方法
    public static function load($classname){
        //只负责加载 application下面的 控制器类和模型类,如GoodsController,AdminModel
        if (substr($classname, -10) == 'Controller'){
            require CUR_CONTROLLER_PATH . "{$classname}.class.php";
        } elseif (substr($classname, -5) == "Model"){
            require MODEL_PATH . "{$classname}.class.php";
        } else {
            //其它情况,暂无
        }

    }
}
  • init方法中宏定义各个文件夹的路径信息
  • init方法中还解析url中的参数来确定路径信息
  • autoload方法中注册加载了类信息
  • router方法实例化控制器并调用该控制器的IndexAction方法
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,084评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,169评论 18 399
  • 1 什么是MVC MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式。 MVC...
    申城墨道阅读 6,228评论 0 10
  • 一. Java基础部分.................................................
    wy_sure阅读 9,291评论 0 11
  • 两天都写了六次六时书,感觉昨天今天的效率都高不少。冥想也不那么昏沉了。 今天说说无意义的语言。无意义的语言按照同心...
    热瓦昆空阅读 3,021评论 1 5

友情链接更多精彩内容