构建自己的PHP框架--搭建基本结构

首先,我们来说一下,为什么要创建自己的框架?

为什么要创建自己的框架呢?如果你跟周围的人讨论,每个人都会告诉你重复发明轮子是一件糟糕的事情,你最好选择一个已有的框架,忘掉“创建自己的框架”这种想法。大部分情况,他们是正确的,但是我想到了几个创建自己的框架的好处:

  • 了解更多框架的底层架构
  • 创建一个能满足你特殊需求的框架(但首先要确定你的需求真的是很特别)
  • 因为乐趣而试着写一个框架(为了“学习然后抛弃”的目的)
  • 想利用新的开发技术以及最佳实践重构已经存在的项目
  • 向世界证明自己也是可以写出框架的(......但只需那么一点点付出)

我将一步步的,循序渐进的引导你创建一个框架。每一步你得到的都是一个完全能使用的框架。我们将从一个简单的框架开始,然后一点点的给它加功能。最后,你将能得到一个完整的web框架。

上面的原因是摘来的使用Symfony2的组件创建自己的PHP框架,觉得说的不错就直接拿过来用了。

我们先建立一个目录,然后进入该目录

mkdir simple-framework
cd simple-framework

然后分别建立放置controller/model/view等的目录

mkdir controllers models views public

public用来存放统一的入口,在里面建立index.php,大部分框架现在都是单一入口。

然后我们需要支持以下composer,我们希望第三方的包都能通过composer来管理。如果你还不知道composer是什么,请查看composer

在simple-framework文件夹下执行 composer init,然后填写相应内容,生成一个composer.json文件,其内容大概如下:

{
    "name": "craryprimitiveman/simple-framework",
    "description": "A simple php framework",
    "license": "MIT",
    "authors": [
        {
            "name": "harrysun",
            "email": "[email protected]"
        }
    ],
    "require": {}
}

让后修改以下,结果如下:

{
    "name": "craryprimitiveman/simple-framework",
    "description": "A simple php framework",
    "license": "MIT",
    "authors": [
        {
            "name": "harrysun",
            "email": "[email protected]"
        }
    ],
    "require": {},
    "autoload": {
        "psr-4": {
            "sf\\": "src/",
            "app\\": ""
        }
    },
    "repositories": [
        {"type": "composer", "url": "http://packagist.phpcomposer.com"},
        {"packagist": false}
    ]
}

其中的autoload是为了支持我们自己项目的文件加载,其中sf下的是framework的code,而app下的是正常业务罗辑的code,其中的repositories是为了解决在国内使用composer下载,下载不下来的问题,如果在国外,或者有VPN做代理,可以直接去掉。

然后执行composer install。

这样基本的目录结构就构建好了。

在入口文件public/index.php中,引入autoload文件,如下:

<?php
require_once __DIR__ . ‘/../vendor/autoload.php‘;

然后我们定义我们的url是这样的http://localhost/simple-framework/public/index.php?r=site/test,之后会加相应的nginx或apache的rewrite,是url变简洁好看,但暂时先这样。

这个url访问了SiteController中的actionTest,下面我们来简单实现这个功能。

<?php
require_once __DIR__ . ‘/../vendor/autoload.php‘;

$router = $_GET[‘r‘];
list($controllerName, $actionName) = explode(‘/‘, $router);
$ucController = ucfirst($controllerName);
$controllerName = ‘app\\controllers\\‘ . $ucController . ‘Controller‘;
$controller = new $controllerName();
return call_user_func_array([$controller, ‘action‘. ucfirst($actionName)];

上面的code未添加任何的错误处理,只是一个简单的功能实现。

然后在controllers文件夹中添加SiteController.php文件,内容如下:

<?php
namespace app\controllers;

class SiteController
{
    public function actionTest()
    {
        echo ‘success!‘;
    }
}

然后访问之前的url http://localhost/simple-framework/public/index.php?r=site/test,你会看到打印出了success!

然后我们在来写一个actionView方法去渲染一个页面。actionView的代码如下:

    public function actionView()
    {
        $body = ‘Test body information   ‘;
        require ‘../views/site/view.php‘;
    }

我们还需要在views下面添加site文件夹,并在site文件夹下创建view.php文件,其内容如下:

<html>
    <head>
        <title>title</title>
    <head>
    <body>
        <?php echo $body;?>
    </body>
</html>

最后访问http://localhost/simple-framework/public/index.php?r=site/view,会得到如下页面:

好了,今天就先到这里。项目内容和博客内容也都会放到Github上,欢迎大家提建议。

code:https://github.com/CraryPrimitiveMan/simple-framework/tree/0.1

blog project:https://github.com/CraryPrimitiveMan/create-your-own-php-framework

时间: 2024-08-06 16:01:51

构建自己的PHP框架--搭建基本结构的相关文章

基于mvc结构的前端页面框架搭建

前端开发一年了,向大家交流下自己实践总结下来的一点点开发心得.人生难免磕磕碰碰,前进的道路很多,在学习工作上我们都得学会如何让自己过的更高效,代码亦是如此. 下面,开始介绍自己总结的前端框架搭建(布局搭建). 1,项目文件结构. 2,index.html页面内容 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <ti

社会化海量数据采集爬虫框架搭建

如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 随着BIG DATA大数据概念逐渐升温,如何搭建一个能够采集海量数据的架构体系摆在大家眼前.如何能够做到所见即所得的无阻拦式采集.如何快速把不规则页面结构化并存储.如何满足越来越多的数据采集还要在有限时间内采集.这篇文章结合我们自身项目经验谈一下. 我们来看一下作为人是怎么获取网页数据的呢? 打开浏览器,输入网址url访问页面内容. 复制页面内容的标题.作者.内容. 存储到文本文件或者exc

spring框架搭建笔记

◆简介 目的:解决企业应用开发的复杂性 功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能 范围:任何Java应用 Spring 框架是一个分层架构,由 7 个定义良好的模块组成.Spring 模块构建在核心容器之上,核心容器定义了创建.配置和管理 bean 的方式. 组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现.每个模块的功能如下: ? 核心容器:核心容器提供 Spring 框架的基本功能.核心容器的主要组件是 BeanFac

angular2框架搭建,angular-cli使用,angular2学习

angular红红火火很多年了,一眨眼ng4都出来了,我也只能叹息前端的日新月异,以及感叹自己永远追赶不上时代的步伐,但是没关系,一个优秀的前端不在于他懂的无数的框架,而在于遇到问题时候懂得如何学习,如何解决,所以当你需要用到一个新技术的时候,你可以很快的上手,如何学习,就非常重要,学习的途经有很多,每个人都有自己的方法.所以良好的学习能力比你走马观花的了解重要得多,当然为了求职,走马观花很重要,但对于职业生涯显得没那么重要,骚年,好好培养自己的学习能力吧,有朝一日必定大有用途. 废话不多了,我

SSH框架搭建过程

什么是SSH? SSH对应 struts spring hibernate struts 采用MVC模式,主要是作用于用户交互 spring 采用IOC和AOP~作用比较抽象,是用于项目的松耦合 hibernate 是对象持久化框架,其实就是实体类和数据库表建立关系,操作类就会触发相应的sql语句,可以不用写任何sql语句,完成数据库编程(引自百度知道) SSH就是Struts + Spring + Hibernate 3个Java框架的集合,现在Java开发中常用的框架组合.用来开发后台,与前

[原创]基于VueJs的前后端分离框架搭建之完全攻略

首先请原谅本文标题取的有点大,但并非为了哗众取宠.本文取这个标题主要有3个原因,这也是写作本文的初衷: (1)目前国内几乎搜索不到全面讲解如何搭建前后端分离框架的文章,讲前后端分离框架思想的就更少了,而笔者希望在本文中能够全面.详细地阐述我们团队在前后端分离的摸索中所得到的搭建思路.最佳实践以及架构思想: (2)我们团队所搭建的前后端分离框架,并非只是将网上传播的知识碎片简单拼装,而是一开始就从全局出发,按照整个系统对前后端分离框架的最高期望进行设计,到目前为止,可以说我们的框架完全实现了对我们

ssm框架搭建(上)

前言 之前也说过,工作做的开发都是基于公司现有的框架,心里很没底.所以一直想自己能够搭建出ssm框架.经过多次尝试,终于成功了.这边文章将从两个方面进行,一是框架搭建,二是简单的增删查改. 正文 1.环境搭建 这里采用现在流行的maven方式,而是将需要的jar放在web_inf\lib下面了. 直接贴了一张图,有点任性了...整个工程的结构如下图所示 在conf子包中,是配置文件.mapper下对应mybatis的映射文件,里面包含了相应的sql语句.(mvcLearn\conf\mapper

机房收费系统合作版(一)——框架搭建

机房收费系统的合作版中首次尝试使用框架:三层 + Spring.NET +Nhibernet框架. 一.整体框架图如下: 二.三层架构图如下: DAL层: Adapter: 结构: 实现IRepositoryDAL接口:扩展 继承RepositoryBaseDAL父类:复用 功能: 操作类:封装基本的操作--增删改查 this.HibernateTemplate.Save(entity) this.HibernateTemplate.Delete(entity) this.HibernateTe

微信公众平台开发教程(三) 基础框架搭建

微信公众平台开发教程(三) 基础框架搭建 上一章,我们已经初步讲解了微信公众账号开发的基本原理,今天我们来探索设计实现. 首先我们设计了模块层次图,当然图中只是给出一种实现方式,不局限于此.具体见下图. 主要功能介绍如下: 1)请求接口层.处理HTTP请求,及响应 2)分发层.由接口层传入请求,然后具体分析请求类型,分发至不同的处理器 3)业务逻辑层.这里是我们的具体业务逻辑了,根据请求,实现具体的业务逻辑. 4)数据层.我们在实现某个应用时可能需要访问数据,可以是数据库或者是文件.如果是简单应