乐趣区

关于laravel:构造一个仿Laravel-Mvc框架-路由篇

在咱们日常应用 Laravel 框架中, 有很多值得咱们学习的设计理念和开发思维, 如何代码变得更加“优雅”, 外围架构中组件化、服务容器、数据库 ORM 都是很值得咱们去探索一二的方向。

在本系列博客中, 将利用 Laravel 中 组件化 的特点来构建一个迷你 仿 Laravel 的 MVC 框架。

本篇的利用次要是讲述, 如何利用 illuminate/routing 来实现框架的路由模块, 通过配置的定义来实现申请的转发和跳转。

1. 初始化一个新我的项目

首先创立一个我的项目, 名称轻易定义, 我这里采纳的是 laramvc

mkdir laramvc

而后创立一个 composer.json 文件

填充内容如下:

{
    "name": "你的项目名称",
    "authors": [{
        "name": "作者名称",
        "email": "作者邮箱"
    }],
    "require": {}}

执行 composer update 用于生成 vendor 目录及主动加载文件。

composer update

执行实现后, 咱们仿照 Laravel 在我的项目下, 建设 apppublic 目录, 用于贮存我的项目外围业务逻辑及提供对外拜访逻辑。

mkdir app && mkdir public

2. 增加路由组件

执行完上述步骤后, 咱们开始增加路由组件 illuminate/routing, 然而该组件又依赖到了另一个组件 illuminate/events 组件, 所以咱们须要将这两个组件一起引入进来。

执行 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 组件化的劣势就能够轻松的定制出一个

退出移动版