zanphp原始碼解讀 – MVC說起

JeRuen發表於2019-02-16

前言

當然從我們熟悉(但不完全熟悉)的 MVC 說起。簡(zhi)單(jie)的描述.

1. MVC 概覽

1.1. URL 規則

上篇 目錄說明中 提到的,這裡不多說 規則就是這樣,後面來說其原始碼

1.2. Controller && Action

src/Index/IndexController.php > function dbOperation() {}


<?php namespace ComJeRuenHttpDemoControllerIndex;

use ZanFrameworkFoundationDomainHttpController as Controller;
use ComJeRuenHttpDemoModelIndexGetDBData;

class IndexController extends Controller
{
    //運算元據庫示例
    public function dbOperation()
    {
        
        $demo = new GetDBData();

        $result = (yield $demo->doSql());
        yield $this->r(0, `json string`, $result);
    }

}

1.3. Model

從上的 namespace 得知 Model src/Model/Index/GetDBData
Controller 中 獲取 一個 Model $demo
$demo->doSql() 獲取相關資料
當然 這裡 的 GetDBData 只是一個演示,正常來說 應該是個 User 、 Shop 等等啥的
同樣 doSql() 也是演示而已, 想成 getAllUser(), getBoy() 啥的。
下面 是 Model 中的 具體 邏輯了。
這裡 youzan 採用的是 SqlMap的 方式。至於為什麼。看官網說明吧。
當然這個 SqlMap 不是那個傳說中的 Sql注入工具

<?php

namespace ComJeRuenHttpDemoModelIndex;

use ZanFrameworkStoreFacadeDb;

class GetDBData
{
    public function doSql()
    {
        $data = [
            `limit` => 2
        ];
        //demo.demo_sql_id1_1對應resource/sql/demo.php中的配置
        yield Db::execute("demo.demo_sql_id1_1", $data);
    }
}
<?php

// 參見sqlmap文件
return [

    `demo_sql_id1_1`      => [
        `table` => "TABLES",
        `sql`           => "
            SELECT * FROM TABLES
            #LIMIT#
        ",
    ],
];

1.4. View

JSON View

上面介紹 Model 時候 yield $this->r(0, `json string`, $result);
返回的 json ‘View’

Template View

public function showTpl()
{
    // -> src/Demo/View/Test/test.html
    $this->assign("str", "Zan Framework");     //給模板中的變數賦值

    yield $this->display("Demo/test/test");    //輸出模板頁面
}

2. MVC 相關配置

2.1 路由配置

resource/config/share/route.php
http://zanphpdoc.zanphp.io/MV…

<?php

return [
    `default_route` => `/index`,            // 預設 module  對應 src/Index目錄
    `default_controller` => `index`,        // 預設 controller 對應 src/Index/IndexController
    `default_action` => `index`,            // 預設 action  對應 IndexController 中的 action 方法
    `default_format` => `html`,             // 響應 content-type
    // `router_class` => `/namespace/router_class`,   // 自定義路由
];

2.2 session 啟用

resource/config/test/server.php

<?php

return [
    // other config
    `session` => [
        `run` => true,    // true 啟用 session
        `store_key` => `demo.session.session`,
    ],
];

3. 原始碼剖析

想了想下 還是 後面再說吧, 繼續吊胃口

相關資料

資料庫操作
SqlMap
zanPHP-MVC

相關文章