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


Posted in PHP onAugust 04, 2016

前言

Laravel 的路由功能很强大,默认都是定义在 routes.php 文件中,随着项目越来越大,我们需要的定义的路由越来越多,想象一下,如果几百上千个路由都定义在一个文件中,如何去维护?也许还有不同的人都在同一个文件定义路由,这就造成了冲突,因此我们需要分割 routes.php 文件。

下面介绍一种很优雅的方式。

app/Providers/RouteServiceProvider.php map 方法中可以如下定义:

public function map(Router $router)
{
  $router->group(['namespace' => $this->namespace], function ($router) {
    //require app_path('Http/routes.php');
    foreach (glob(app_path('Http//Routes') . '/*.php') as $file) {
      $this->app->make('App\\Http\\Routes\\' . basename($file, '.php'))->map($router);
    }
  });
}

文件组织结构图如下:

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

这样它会遍历 app/Http/Routes/ 文件夹下的文件,遍历每个文件路由类的 map 方法,每个文件的结构都类似,

举个例子:

<?php
/**
 * Created by PhpStorm.
 * User: xl
 * Date: 2016/7/4
 * Time: 18:07
 */
namespace App\Http\Routes;

use Illuminate\Contracts\Routing\Registrar;

class HomeRoutes
{
  public function map(Registrar $router)
  {
    $router->group(['domain' => 'www.tanteng.me', 'middleware' => 'web'], function ($router) {
      $router->auth();
      $router->get('/', ['as' => 'home', 'uses' => 'IndexController@index']);
      $router->get('/blog', ['as' => 'index.blog', 'uses' => 'BlogController@index']);
      $router->get('/resume', ['as' => 'index.resume', 'uses' => 'IndexController@resume']);
      $router->get('/post', ['name' => 'post.show', 'uses' => 'ArticleController@show']);
      $router->get('/contact', ['as' => 'index.contact', 'uses' => 'IndexController@contact']);
      $router->post('/contact/comment', ['uses' => 'IndexController@postComment']);
      $router->get('/travel', ['as' => 'index.travel', 'uses' => 'TravelController@index']);
      $router->get('/travel/latest', ['as' => 'travel.latest', 'uses' => 'TravelController@latest']);
      $router->get('/travel/{destination}/list', ['as' => 'travel.destination', 'uses' => 'TravelController@travelList']);
      $router->get('/travel/{slug}', ['uses' => 'TravelController@travelDetail']);
      $router->get('/sitemap.xml', ['as' => 'index.sitemap', 'uses' => 'IndexController@sitemap']);
    });
  }
}

把路由规则都写到每个文件的 map 方法中,这样一来,就实现了很好的 routes.php 文件的分开管理。此外,你也可以简单的分割,直接把 routes.php 中的定义拆散成多个文件,通过 require 的方式引入,但是哪个更好,一目了然。

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

php artisan route:cache

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

好了,以上就是Laravel路由文件(routes.php)最佳分割方式的全部内容,希望对大家学习Laravel有所帮助。也希望大家多多支持三水点靠木。

PHP 相关文章推荐
使用apache模块rewrite_module (转)
Feb 14 PHP
PHP数组游标实现对数组的各种操作详解
Jan 26 PHP
php简单实现多语言切换的方法
May 09 PHP
php 遍历目录,生成目录下每个文件的md5值并写入到结果文件中
Dec 12 PHP
深入解析Laravel5.5中的包自动发现Package Auto Discovery
Sep 13 PHP
PHP使用curl_multi实现并发请求的方法示例
Apr 29 PHP
PHP支付宝当面付2.0代码
Dec 21 PHP
PHP基于curl实现模拟微信浏览器打开微信链接的方法示例
Feb 15 PHP
PHP 7.4中使用预加载的方法详解
Jul 08 PHP
如何重写Laravel异常处理类详解
Dec 20 PHP
PHP使用QR Code生成二维码实例
Jul 07 PHP
基于Swoole实现PHP与websocket聊天室
Aug 03 #PHP
浅析php如何实现App常用的秒发功能
Aug 03 #PHP
php微信开发之带参数二维码的使用
Aug 03 #PHP
PHP支付系统设计与典型案例分享
Aug 02 #PHP
php微信支付接口开发程序
Aug 02 #PHP
比较完整的微信开发php代码
Aug 02 #PHP
微信利用PHP创建自定义菜单的方法
Aug 01 #PHP
You might like
超级好用的一个php上传图片类(随机名,缩略图,加水印)
2010/06/30 PHP
php下通过伪造http头破解防盗链的代码
2010/07/03 PHP
php中apc缓存使用示例
2013/12/25 PHP
基于laravel belongsTo使用详解
2019/10/18 PHP
一个JS翻页效果
2007/07/23 Javascript
jquery将一个表单序列化为一个对象的方法
2013/12/02 Javascript
Jquery 1.9.1源码分析系列(十二)之筛选操作
2015/12/02 Javascript
easyUI实现类似搜索框关键词自动提示功能示例代码
2016/12/27 Javascript
selenium 与 chrome 进行qq登录并发邮件操作实例详解
2017/04/06 Javascript
NodeJS自定义模块写法(详解)
2017/06/27 NodeJs
详解ajax的data参数错误导致页面崩溃
2018/04/30 Javascript
js 实现在2d平面上画8的方法
2018/10/10 Javascript
layui递归实现动态左侧菜单
2019/07/26 Javascript
8个有意思的JavaScript面试题
2019/07/30 Javascript
js实现div色块碰撞
2020/01/16 Javascript
JS中间件设计模式的深入探讨与实例分析
2020/04/11 Javascript
[02:50]2014DOTA2 TI预选赛预选赛 大神专访第一弹!
2014/05/21 DOTA
python3+PyQt5实现文档打印功能
2018/04/24 Python
解决Mac下首次安装pycharm无project interpreter的问题
2018/10/29 Python
对pandas的算术运算和数据对齐实例详解
2018/12/22 Python
python并发编程多进程 互斥锁原理解析
2019/08/20 Python
Python的条件锁与事件共享详解
2019/09/12 Python
Window10下python3.7 安装与卸载教程图解
2019/09/30 Python
Python插件机制实现详解
2020/05/04 Python
Python函数__new__及__init__作用及区别解析
2020/08/31 Python
Python使用paramiko连接远程服务器执行Shell命令的实现
2021/03/04 Python
Spartoo荷兰:鞋子、包包和服装
2018/07/12 全球购物
联想法国官方网站:Lenovo法国
2018/10/18 全球购物
什么是封装
2013/03/26 面试题
教师职称自我鉴定
2014/02/12 职场文书
五年后的职业生涯规划
2014/03/04 职场文书
党员廉洁自律承诺书
2014/05/26 职场文书
竞选班干部演讲稿300字
2014/08/20 职场文书
老人节标语大全
2014/10/08 职场文书
圣诞晚会主持词
2015/07/01 职场文书
一篇合格的广告文案,其主要目的是什么?
2019/07/12 职场文书