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 相关文章推荐
linux系统上支持php的 iconv()函数的方法
Oct 01 PHP
php数组函数序列之array_pop() - 删除数组中的最后一个元素
Nov 07 PHP
一个简洁的PHP可逆加密函数(分享)
Jun 06 PHP
19个超实用的PHP代码片段
Mar 14 PHP
php使用ereg验证文件上传的方法
Dec 16 PHP
PHP列出MySQL中所有数据库的方法
Mar 12 PHP
PHP中的随机性 你觉得自己幸运吗?
Jan 22 PHP
php7基于递归实现删除空文件夹的方法示例
Jun 15 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
Nov 16 PHP
PHP按一定比例压缩图片的方法
Oct 12 PHP
用PHP的反射实现委托模式的讲解
Mar 22 PHP
Laravel 自带的Auth验证登录方法
Sep 30 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
Gregarius中文日期格式问题解决办法
2008/04/22 PHP
php入门学习知识点八 PHP中for循环基本应用之九九乘法口绝表
2011/07/14 PHP
PHP中改变图片的尺寸大小的代码
2011/07/17 PHP
Laravel的throttle中间件失效问题解决方法
2016/10/09 PHP
js 用CreateElement动态创建标签示例
2013/11/20 Javascript
javascript进行数组追加方法小结
2014/06/16 Javascript
js使用onmousemove和onmouseout获取鼠标坐标的方法
2015/03/31 Javascript
js+css实现的圆角边框TAB选项卡滑动门代码分享(2款)
2015/08/26 Javascript
JavaScript禁止用户多次提交的两种方法
2016/07/24 Javascript
javascript容错处理代码(屏蔽js错误)
2017/01/20 Javascript
JS及JQuery对Html内容编码,Html转义
2017/02/17 Javascript
微信小程序 开发之滑块视图容器(swiper)详解及实例代码
2017/02/22 Javascript
Vue学习笔记进阶篇之函数化组件解析
2017/07/21 Javascript
基于vue-resource jsonp跨域问题的解决方法
2018/02/03 Javascript
解决Mac安装thrift因bison报错的问题
2018/05/17 Javascript
解决Layui 表单提交数据为空的问题
2018/08/15 Javascript
Vue中jsx不完全应用指南小结
2019/11/01 Javascript
vue.js中使用微信扫一扫解决invalid signature问题(完美解决)
2020/04/11 Javascript
详解Python中的正则表达式的用法
2015/04/09 Python
浅谈tensorflow中几个随机函数的用法
2018/07/27 Python
用pycharm开发django项目示例代码
2018/10/24 Python
解决python Markdown模块乱码的问题
2019/02/14 Python
如何利用Pyecharts可视化微信好友
2019/07/04 Python
Python3显示当前时间、计算时间差及时间加减法示例代码
2019/09/07 Python
Django高并发负载均衡实现原理详解
2020/04/04 Python
使用Python将图片转正方形的两种方法实例代码详解
2020/04/29 Python
Python 如何在字符串中插入变量
2020/08/01 Python
Python如何绘制日历图和热力图
2020/08/07 Python
CSS3实现文字波浪线效果示例代码
2016/11/20 HTML / CSS
大学生冰淇淋店商业计划书
2014/01/14 职场文书
施工员岗位职责
2014/03/16 职场文书
民主生活会发言材料
2014/10/20 职场文书
结婚保证书(卖身契)
2015/02/26 职场文书
什么是动态刷新率DRR? Windows11动态刷新率功能介绍
2021/11/21 数码科技
Java 在线考试云平台的实现
2021/11/23 Java/Android
vue 实现弹窗关闭后刷新效果
2022/04/08 Vue.js