前言
當然從我們熟悉(但不完全熟悉)的 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. 原始碼剖析
想了想下 還是 後面再說吧, 繼續吊胃口