文档章节

Laravel 分割 routes.php 路由文件的最佳方式

zhiqiangw
 zhiqiangw
发布于 2016/10/06 11:07
字数 531
阅读 26
收藏 0
点赞 0
评论 0

Laravel 的路由功能很强大, 路由规则默认都定义在 routes.php 文件中,但是随着项目越来越大, 我们需要的定义的规则越来越多, 如果几百上千个路由都定义在一个文件中, 如何去维护? 如果不同的人都在同一个文件定义路由, 这就造成了冲突, 因此我们有必要将 routes.php 文件分割成多个文件, 可以按照功能模块来划分, 下面介绍一种很优雅的方式.

在 Laravel 5.1 LTS 版本 app/Providers/RouteServiceProvider.php 的 map 方法中可以如下定义:

<?php

namespace App\Providers;

use Illuminate\Routing\Router;  
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;  
use Route;

class RouteServiceProvider extends ServiceProvider  
{
    /**
     * This namespace is applied to the controller routes in your routes file.
     *
     * In addition, it is set as the URL generator's root namespace.
     *
     * @var string
     */
    protected $namespace = 'App\Http\Controllers';
    protected $api_namespace = 'App\Http\ApiControllers';

    /**
     * Define your route model bindings, pattern filters, etc.
     *
     * @param  \Illuminate\Routing\Router  $router
     * @return void
     */
    public function boot(Router $router)
    {
        $router->pattern('id', '[0-9]+');

        parent::boot($router);
    }

    /**
     * Define the routes for the application.
     *
     * @param  \Illuminate\Routing\Router  $router
     * @return void
     */
    public function map(Router $router)
    {
        $this->mapWebRoutes();
        $this->mapApiRoutes();
    }

    /**
     * Web 路由
     */
    protected function mapWebRoutes()
    {
        Route::group([
            'namespace' => $this->namespace,
            'middleware' => 'restrict_web_access',
        ], function ($router) {
            require base_path('routes/web.php');
        });
    }

    /**
     * Api 路由
     */
    protected function mapApiRoutes()
    {
        $api_router = app('Dingo\Api\Routing\Router');
        $api_router->group([
            'version'   => config('api.prefix'),
            'namespace' => $this->api_namespace,
        ], function ($router) {
            require base_path('routes/api.php');
        });
    }
}

文件夹结构如下:

file

笔者在以前的项目中,Route,都是以各个路由组在路由中定义,一旦一个项目浅浅庞大,路由也略显臃肿。

通过把路由规则分割写到不同的文件中, 这样一来, 就可以根据功能模块分开管理路由文件了. 此外, 你也可以简单的分割, 直接把 routes.php 中的定义拆散成多个文件, 通过 require 的方式引入.

那么这样路由分开多个文件后岂不是增加调用次数, 会不会影响性能? 答案是不必担心. 通过 Laravel 的命令:

php artisan route:cache  

生成路由缓存文件后, 路由只会读取缓存文件的路由规则, 因此不会影响性能, 这样做让开发更高效和规范.

© 著作权归作者所有

共有 人打赏支持
zhiqiangw
粉丝 12
博文 191
码字总数 142634
作品 0
郑州
程序员
Laravel 分割 routes.php 路由文件的最佳方式

Laravel 的路由功能很强大,路由规则默认都定义在 routes.php 文件中,但是随着项目越来越大,我们需要的定义的规则越来越多,如果几百上千个路由都定义在一个文件中,如何去维护?如果不同的...

mdoo ⋅ 2016/09/18 ⋅ 0

Laravel创建第一个程序

1.在使用Laravel 入口文件是在laravle/public/index.php Controller是位于文件laravel/app/Http/Controllers View位于laravel/resources/Views Routes(路由)位于laravel/app/Http文件下。 2.......

小贵子_IOS ⋅ 2016/05/10 ⋅ 0

laravel (5.1) & Ember.js (1.13.0) 的整合

Lavavel 不必过多介绍了, 作为全世界最流行的PHP框架,有着清晰的架构、完善的文档、丰富的工具等等,能够帮助开发者快速构建多页面web应用程序。 然而,随着技术的发展,web程序的另一面—...

Lee的白板报 ⋅ 2015/08/15 ⋅ 1

Laravel入门:MVC框架

本文基于Laravel 4.2编写。 路由Hello World 在app/routes.php里面添加下面代码,然后在浏览器里访问http:///helloworld可以见到结果。 视图(View) 理论上可以把所有代码都写在app/routes....

hyh2015 ⋅ 2016/04/07 ⋅ 0

Laravel大型项目系列教程

Laravel大型项目系列教程(一) 一、简介 本教程将使用Laravel完成一个多用户的博客系统,大概会包含如下内容: - 路由管理。 - 用户管理,如用户注册、修改信息、锁定用户等。 - 文章管理,...

实验楼 ⋅ 2015/01/21 ⋅ 10

01. Laravel 4 路由

基础路由 URL 地址: 对应的路由设置: 可供使用的路由类型 分别对应 (查看) (新增) (修改) (删除) 这4种URL请求类型。 而 则是包含了以上4种请求类型。 使用外部定义的匿名函数 使用路由参数...

成武 ⋅ 2013/12/20 ⋅ 0

Laravel 5.0 - Middleware (中间件)

图片:http://stackphp.com/ 如上图所示,中心的绿色区域是整个应用的核心区域。 所以,中间件就是一系列处理请求和响应的方式而不是你用程序逻辑的一部分。 Laravel 中默认使用中间件处理请...

mdoo ⋅ 2015/09/27 ⋅ 0

06. Laravel 4 高级路由

命名路由 模板中生成指向此路由的链接: 若需获取当前路由的名称,可以使用 方法。 安全路由(HTTPS) 路由参数过滤 分组路由 路由前缀 如此,访问链接将变成 和 。 域名路由 如此,访问链接...

成武 ⋅ 2013/12/20 ⋅ 1

laravel5入门(一)

安装 如果有想法的可以用composer(PHP依赖管理工具)进行安装,如果怕麻烦的也可以到网上下载laravel的一键安装包,个人认为还是可以熟悉一下composer。 虚拟域名配置最好配置到你项目文件下...

空无一物 ⋅ 2016/06/13 ⋅ 0

基于 Pusher 驱动的 Laravel 事件广播(下)

说明:本部分主要基于三个示例来说明Pusher服务的使用。 基础 频道用来辨识程序内数据的场景或上下文,并与数据库中的数据有映射关系。就像是听广播的频道一样,不同频道接收不同电台。 如果...

botkenni ⋅ 2016/10/10 ⋅ 1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Cube、Cuboid 和 Cube Segment

1.Cube (或Data Cube),即数据立方体,是一种常用于数据分析与索引的技术;它可以对原始数据建立多维度索引。通过 Cube 对数据进行分析,可以大大加快数据的查询效率 2.Cuboid 在 Kylin 中特...

无精疯 ⋅ 36分钟前 ⋅ 0

github太慢

1:用浏览器访问 IPAddress.com or http://tool.chinaz.com 使用 IP Lookup 工具获得github.com和github.global.ssl.fastly.net域名的ip地址 2:/etc/hosts文件中添加如下格式(IP最好自己查一...

whoisliang ⋅ 38分钟前 ⋅ 0

非阻塞同步之 CAS

为解决线程安全问题,互斥同步相当于以时间换空间。多线程情况下,只有一个线程可以访问同步代码。这种同步也叫阻塞同步(Blocking Synchronization). 这种同步属于一种悲观并发策略。认为只...

长安一梦 ⋅ 49分钟前 ⋅ 0

云计算的选择悖论如何对待?

人们都希望在工作和生活中有所选择。但心理学家的调查研究表明,在多种选项中进行选择并不一定会使人们更快乐,甚至不会产生更好的决策。心理学家Barry Schwartz称之为“选择悖论”。云计算为...

linux-tao ⋅ 51分钟前 ⋅ 0

我的第一篇个人博客

虽然这是个技术博客,但是,我总是想写一些自己的东西,所有就大胆的在这里写下了第一篇非技术博客。技术博客也很久没有更新,个人原因。 以后自己打算在这里写一些非技术博客,可能个人观点...

Mrs_CoCo ⋅ 52分钟前 ⋅ 0

Redis 注册为 Windows 服务

Redis 注册为 Windows 服务 redis 注册为 windows 服务相关命令 注册服务 redis-server.exe –service-install redis.windows.conf 删除服务 redis-server –service-uninstall 启动服务 re......

Os_yxguang ⋅ 52分钟前 ⋅ 0

世界那么大,语言那么多,为什么选择Micropython,它的优势在哪?

最近国内MicroPython风靡程序界,是什么原因导致它这么火呢?是因为他功能强大,遵循Mit协议开源么? 错!因为使用它真的是太舒服了!!! Micropython的由来,这得益于Damien George这位伟大...

bodasisiter ⋅ 56分钟前 ⋅ 0

docker 清理总结

杀死所有正在运行的容器 docker kill $(docker ps -a -q) 删除所有已经停止的容器(docker rm没有加-f参数,运行中的容器不会删掉) docker rm $(docker ps -a -q) 删除所有未打 dangling 标...

vvx1024 ⋅ 今天 ⋅ 0

关于学习

以前学车的时候,教练说了这样的一句话:如果一个人坐在车上一直学,一直学,反而不如大家轮流着学。因为一个人一直学,就没有给自己留空间来反思和改进。而轮流着学的时候大家下来之后思考上...

mskk ⋅ 今天 ⋅ 0

压缩工具之gzip-bzip2-xz

win下常见压缩工具:rar zip 7z linux下常见压缩工具:zip gz bz2 xz tar.gz tar.bz2 tar.xz gzip 不支持目录压缩 gzip 1.txt #压缩。执行后1.txt消失,生成1.txt.gz压缩文件 gzip -d 1.txt....

ZHENG-JY ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部