前言
当然从我们熟悉(但不完全熟悉)的 MVC 说起。简(zhi)单(jie)的描述.
1. MVC 概览
1.1. URL 规则
上篇 目录说明中 提到的,这里不多说 规则就是这样,后面来说其源码
1.2. Controller && Action
src/Index/IndexController.php > function dbOperation() {}
<?php namespace Com\JeRuen\HttpDemo\Controller\Index;
use Zan\Framework\Foundation\Domain\HttpController as Controller;
use Com\JeRuen\HttpDemo\Model\Index\GetDBData;
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 Com\JeRuen\HttpDemo\Model\Index;
use Zan\Framework\Store\Facade\Db;
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. 源码剖析
想了想下 还是 后面再说吧, 继续吊胃口
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。