程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 構建自己的PHP框架--搭建基本結構,框架基本結構

構建自己的PHP框架--搭建基本結構,框架基本結構

編輯:關於PHP編程

構建自己的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

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved