• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

php 搞代码 3年前 (2022-01-24) 30次浏览 已收录 0个评论

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

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

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

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

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

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

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

<span style="color: #0000ff">mkdir</span> simple-<span style="color: #000000">frameworkcd simple</span>-framework

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

<span style="color: #0000ff">mkdir</span> controllers models views public

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

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

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

<span style="color: #000000">{    </span>"name": "craryprimitiveman/simple-framework"<span style="color: #000000">,    </span>"description": "A simple php framework"<span style="color: #000000">,    </span>"license": "MIT"<span style="color: #000000">,    </span>"authors"<span style="color: #000000">: [        {            </span>"name": "harrysun"<span style="color: #000000">,            </span>"email": "[email protected]"<span style="color: #000000">        }    ],    </span>"require"<span style="color: #000000">: {}}</span>

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

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

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

然后执行composer install。

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

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

<?<span style="color: #000000">php</span><span style="color: #0000ff">require_once</span> __DIR__ . '/../vendor/autoload.php';

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

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

<?<span style="color: #000000">php</span><span style="color: #0000ff">require_once</span> __DIR__ . '/../vendor/autoload.php'<span style="color: #000000">;</span><span style="color: #800080">$router</span> = <span style="color: #800080">$_GET</span>['r'<span style="color: #000000">];</span><span style="color: #0000ff">list</span>(<span style="color: #800080">$controllerName</span>, <span style="color: #800080">$actionName</span>) = <span style="color: #008080">explode</span>('/', <span style="color: #800080">$router</span><span style="color: #000000">);</span><span style="color: #800080">$ucController</span> = <span style="color: #008080">ucfirst</span>(<span style="color: #800080">$controllerName</span><span style="color: #000000">);</span><span style="color: #800080">$controllerName</span> = 'app\\controllers\\' . <span style="color: #800080">$ucController</span> . 'Controller'<span style="color: #000000">;</span><span style="color: #800080">$controller</span> = <span style="color: #0000ff">new</span> <span style="color: #800080">$controllerName</span><span style="color: #000000">();</span><span style="color: #0000ff">return</span> <span style="color: #008080">call_user_func_array</span>([<span style="color: #800080">$controller</span>, 'action'. <span style="color: #008080">ucfirst</span>(<span style="color: #800080">$actionName</span>)];

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

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

<?<span style="color: #000000">phpnamespace app\controllers;</span><span style="color: #0000ff">class</span><span style="color: #000000"> SiteController{    </span><span style="color: #0000ff">public</span> <span style="color: #0000ff">function</span><span style="color: #000000"> actionTest()    {        </span><span style="color: #0000ff">echo</span> 'success!'<span style="color: #000000">;    }}</span>

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

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

    <span style="color: #0000ff">public</span> <span style="color: #0000ff">function</span><span style="color: #000000"> actionView()    {        </span><span style="color: #800080">$body</span> = 'Test body information   '<span style="color: #000000">;        </span><span style="color: #0000ff">require</span> '../views/site/view.php'<span style="color: #000000">;    }</span>

我们还需要在views下面添加site文件夹,并在site·本2文来源gaodai$ma#com搞$代*码网2搞gaodaima代码文件夹下创建view.php文件,其内容如下:

<span style="color: #0000ff"><</span><span style="color: #800000">html</span><span style="color: #0000ff">></span>    <span style="color: #0000ff"><</span><span style="color: #800000">head</span><span style="color: #0000ff">></span>        <span style="color: #0000ff"><</span><span style="color: #800000">title</span><span style="color: #0000ff">></span>title<span style="color: #0000ff"></</span><span style="color: #800000">title</span><span style="color: #0000ff">></span>    <span style="color: #0000ff"><</span><span style="color: #800000">head</span><span style="color: #0000ff">></span>    <span style="color: #0000ff"><</span><span style="color: #800000">body</span><span style="color: #0000ff">></span>        <span style="color: #0000ff"><?</span><span style="color: #ff00ff">php echo $body;</span><span style="color: #0000ff">?></span>    <span style="color: #0000ff"></</span><span style="color: #800000">body</span><span style="color: #0000ff">></span><span style="color: #0000ff"></</span><span style="color: #800000">html</span><span style="color: #0000ff">></span>

最后访问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


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:构建自各儿的PHP框架-搭建基本结构

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址