在我们日常使用Laravel框架中,有很多值得我们学习的设计理念和开发思想,如何代码变得更加“优雅”,核心架构中组件化、服务容器、数据库ORM 都是很值得我们去探究一二的方向。
在本系列博客中,将利用 Laravel 中组件化的特点来构建一个迷你 仿 Laravel 的 MVC框架。
本篇的应用主要是讲述,如何利用 illuminate/routing 来实现框架的路由模块,通过配置的定义来实现请求的转发和跳转。
1.初始化一个新项目
首先创建一个项目,名称随便定义,我这里采用的是 laramvc
mkdir laramvc
然后创建一个 composer.json 文件
填充内容如下:
{
"name": "你的项目名称",
"authors": [{
"name": "作者名称",
"email": "作者邮箱"
}],
"require": {
}
}
执行 composer update 用于生成vendor目录及自动加载文件。
composer update
执行完成后,我们仿照Laravel在项目下,建立 app 及 public 目录,用于储存项目核心业务逻辑及提供对外访问逻辑。
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 组件化的优势就可以轻松的定制出一个
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。