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 相关文章推荐
php实现ping
Oct 09 PHP
用PHP读注册表
Oct 09 PHP
PHP 一个随机字符串生成代码
May 26 PHP
PHP 登录记住密码实现思路
May 07 PHP
ThinkPHP打开验证码页面显示乱码的解决方法
Dec 18 PHP
php绘图之加载外部图片的方法
Jan 24 PHP
PHP下载文件的函数实例代码
May 18 PHP
示例详解Laravel的注册重构
Aug 14 PHP
PHP对称加密函数实现数据的加密解密
Oct 27 PHP
PHP mysqli事务操作常用方法分析
Jul 22 PHP
ThinkPHP框架表单验证操作方法
Jul 19 PHP
PHP实现单文件、多个单文件、多文件上传函数的封装示例
Sep 02 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
thinkPHP实现瀑布流的方法
2014/11/29 PHP
PHP封装的PDO数据库操作类实例
2017/06/21 PHP
PHP fclose函数用法总结
2019/02/15 PHP
PHP中str_split()函数的用法讲解
2019/04/11 PHP
tp5.1 框架数据库常见操作详解【添加、删除、更新、查询】
2020/05/26 PHP
很酷的javascript loading效果代码
2008/06/18 Javascript
zeroclipboard复制到剪切板的flash
2010/08/04 Javascript
javascript开发随笔二 动态加载js和文件
2011/11/25 Javascript
深入理解JavaScript系列(3) 全面解析Module模式
2012/01/15 Javascript
javascript返回顶部效果(自写代码)
2013/01/06 Javascript
JavaScript调用后台的三种方法实例
2013/10/17 Javascript
js判断是否为ie的方法小结
2014/01/13 Javascript
Node.js connect ECONNREFUSED错误解决办法
2016/09/15 Javascript
ReactJs快速入门教程(精华版)
2016/11/28 Javascript
完美解决jQuery fancybox ie 无法显示关闭按钮的问题
2016/11/29 Javascript
JavaScript实现的前端AES加密解密功能【基于CryptoJS】
2018/08/28 Javascript
Vue中Axios从远程/后台读取数据
2019/01/21 Javascript
小程序websocket心跳库(websocket-heartbeat-miniprogram)
2020/02/23 Javascript
Kettle中使用JavaScrip调用jar包对文件内容进行MD5加密的操作方法
2020/09/04 Javascript
从零学Python之入门(二)基本数据类型
2014/05/25 Python
探究Python的Tornado框架对子域名和泛域名的支持
2015/05/02 Python
使用Python进行QQ批量登录的实例代码
2018/06/11 Python
Python 正则表达式匹配字符串中的http链接方法
2018/12/25 Python
Python设计模式之建造者模式实例详解
2019/01/17 Python
python随机在一张图像上截取任意大小图片的方法
2019/01/24 Python
Django模型序列化返回自然主键值示例代码
2019/06/12 Python
python opencv 二值化 计算白色像素点的实例
2019/07/03 Python
Python Django的安装配置教程图文详解
2019/07/17 Python
使用python制作一个解压缩软件
2019/11/13 Python
在tensorflow中实现屏蔽输出的log信息
2020/02/04 Python
python opencv实现图像配准与比较
2021/02/09 Python
西部世纪.net笔试题面试题
2014/04/03 面试题
社团招新策划书
2014/02/04 职场文书
运动会新闻报道稿
2015/07/22 职场文书
Python学习之包与模块详解
2022/03/19 Python
Python万能模板案例之matplotlib绘制甘特图
2022/04/13 Python