構造一個仿Laravel Mvc框架 - 模型(Model)

接上篇 構造一個仿Laravel Mvc框架 - 路由篇,本章接着敘述,如何構建框架中的 Model層(模型)。php

上一篇中的案例都是將代碼寫在路由閉包中的,若是路由定義的多了,很是很差維護和管理.因此咱們首先須要實現一個 Controller 來處理咱們的業務邏輯,也就是Mvc中的C層。mysql

創建控制器

首先參考Laravel目錄架構,建立好咱們的控制器文件laravel

mkdir  App/Http/Controllers/IndexController

IndexController建立完成後,編寫相關的函數來處理首頁的邏輯.sql

<?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-autoloadjson

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

添加模型組件

上面步驟實現完成後,就開始添加 illuminate/database 這個組件,來實現像Laravel同樣的強大的ORM。segmentfault

執行下面的命令開始引入組件服務器

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函數打印出來了。

相關文章
相關標籤/搜索