構造一個仿Laravel Mvc框架 - 路由篇

在咱們平常使用Laravel框架中,有不少值得咱們學習的設計理念和開發思想,如何代碼變得更加「優雅」,核心架構中組件化、服務容器、數據庫ORM 都是很值得咱們去探究一二的方向。php

在本系列博客中,將利用 Laravel 中組件化的特色來構建一個迷你 仿 Laravel 的 MVC框架。html

本篇的應用主要是講述,如何利用 illuminate/routing 來實現框架的路由模塊,經過配置的定義來實現請求的轉發和跳轉。nginx

1.初始化一個新項目

首先建立一個項目,名稱隨便定義,我這裏採用的是 laramvclaravel

mkdir laramvc

而後建立一個 composer.json 文件數據庫

填充內容以下:json

{
    "name": "你的項目名稱",
    "authors": [{
        "name": "做者名稱",
        "email": "做者郵箱"
    }],
    "require": {

    }
}

執行 composer update 用於生成vendor目錄及自動加載文件。架構

composer update

執行完成後,咱們仿照Laravel在項目下,創建 apppublic 目錄,用於儲存項目核心業務邏輯及提供對外訪問邏輯。mvc

mkdir app && mkdir public

2.添加路由組件

執行完上述步驟後,咱們開始添加路由組件 illuminate/routing,可是該組件又依賴到了另外一個組件 illuminate/events 組件,因此咱們須要將這兩個組件一塊兒引入進來。app

執行 composer 操做以下:composer

composer require "illuminate/events":"*"
composer require "illuminate/routing":"*"

引入完成後,咱們參照laravel創建路由定義文件 app/Http/routes/routers.php

<?php
$app['router']->get('/', function () {
    echo '歡迎訪問 laramvc';
});

定義好路由後,繼續參照laravel創建外部訪問路口文件 public/index.php

index.php 文件內容以下:

<?php

use Illuminate\Container\Container;
use Illuminate\Events\EventServiceProvider;
use Illuminate\Http\Request;
use Illuminate\Routing\RoutingServiceProvider;

//首頁入口

//調用自動加載文件
require __DIR__ . '/../vendor/autoload.php';

//實例化服務容器,對事件服務提供者及路由服務提供者進行註冊
$app = new Container;
with(new EventServiceProvider($app))->register();
with(new RoutingServiceProvider($app))->register();

//加載路由配置
require __DIR__ . './../app/Http/routes/routers.php';
//實例化請求並分發處理請求
$request  = Request::createFromGlobals();
$response = $app['router']->dispatch($request);
//返回響應請求
$response->send();

編寫完成後,就能夠測試運行了,運行本篇案例中採用的是nginx來進行配置。

3.nginx 部署運行

完成上述步驟後,添加一下nginx配置,而後重啓nginx便可部署成功。

server {
    listen       80;    //端口
    server_name  localhost; //域名
    root         /data/www/laramvc/public/; //項目路徑

    location / {
        try_files $uri $uri/ /index.php?$query_string;
        if (!-e $request_filename){ 
            rewrite ^/(.*) /index.php last; 
        }
        index  index.html index.htm index.php;
        include     /usr/local/etc/nginx/conf.d/php-fpm;
    }   
}

運行成功的效果以下,這樣就利用 laravel 組件化的優點就能夠輕鬆的定製出一個

image

相關文章
相關標籤/搜索