接上篇 构造一个仿Laravel Mvc框架 - 路由篇,本章接着叙述,如何构建框架中的 Model层(模型)。

上一篇中的案例都是将代码写在路由闭包中的,如果路由定义的多了,非常不好维护和管理.所以我们首先需要实现一个 Controller 来处理我们的业务逻辑,也就是Mvc中的C层。

建立控制器

首先参考Laravel目录架构,创建好我们的控制器文件

mkdir  App/Http/Controllers/IndexController

IndexController创建完成后,编写相关的函数来处理首页的逻辑.

<?php

namespace App\Http\Controllers;

class IndexController
{
    public function index()
    {
        return '成功访问首页,这里是IndexController';
    }
}

更改路由映射到该控制器上,修改routers.php

$app['router']->get('/index', 'App\Http\Controllers\IndexController@index');

最后更改composer.json,配置自动加载路径,然后再执行 composer dump-autoload

{
    "name": "17ns/laramvc",
    "authors": [{
        "name": "17ns",
        "email": "aa@bb.com"
    }],
    "require": {
        "illuminate/routing": "*",
        "illuminate/events": "*"
    },
    "autoload": {
        "psr-4": {
            "App\\": "app/"
        }
    }
}

添加模型组件

上面步骤实现完成后,就开始添加 illuminate/database 这个组件,来实现像Laravel一样的强大的ORM。

执行下面的命令开始引入组件

composer require "illuminate/database":"*" 

引入完成后,就开始完善数据库的配置,这里依然参照laravel建立一个 config/database.php 文件,来作为数据库连接的配置文件,建立完成后,开始填写本地货远端服务器的MYSQL配置信息。

<?php

return [
    'driver'    => 'mysql',
    'host'      => 'localhost',
    'database'  => 'laramvc',
    'username'  => 'root',
    'password'  => 'localdb001',
    'charset'   => 'utf8',
    'collation' => 'utf8_general_ci',
    'prefix'    => '',
];

配置完成后,就需要在首页入口文件启动 Eloquent ORM,相关代码如下:

<?php

use Illuminate\Container\Container;
use Illuminate\Events\EventServiceProvider;
use Illuminate\Http\Request;
use Illuminate\Routing\RoutingServiceProvider;
use Illuminate\Database\Capsule\Manager;

//首页入口

//调用自动加载文件
require __DIR__ . '/../vendor/autoload.php';

//实例化服务容器,对事件服务提供者及路由服务提供者进行注册
$app = new Container;
with(new EventServiceProvider($app))->register();
with(new RoutingServiceProvider($app))->register();

//启动 Eloquent ORM模块进行配置
$dbManager = new Manager();
$dbManager->addConnection(require '../config/database.php');
$dbManager->bootEloquent();

//加载路由配置
require __DIR__ . './../app/Http/routes/routers.php';
//实例化请求并分发处理请求
$request  = Request::createFromGlobals();
$response = $app['router']->dispatch($request);
//返回响应请求
$response->send();

上面的DB Manager 会去添加config/database.php的数据库连接,添加完成后,通过
bootEloquent函数启动 Eloquent ORM。

创建Model

上面的步骤无误后,开始建立Model文件,这边依然参考Laravel中,建立一个 App/User.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    protected $timestamp = false;
}

Model创建完成后,开始引入到我们的控制器中使用

<?php

namespace App\Http\Controllers;

use App\User;

class IndexController
{
    public function index()
    {
        dd(User::find(1));

        return '成功访问首页,这里是IndexController';
    }
}

我们将users表中的id为1的用户进行查找,然后就通过dd函数打印出来了。


Sinming
307 声望21 粉丝

Bug总工程师