zanphp源码解读 - MVC说起

2017-10-18 15:32:15 934 思小齐 思小齐

前言

当然从我们熟悉(但不完全熟悉)的 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. 源码剖析

想了想下 还是 后面再说吧, 继续吊胃口

相关资料

数据库操作
SqlMap
zanPHP-MVC