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 相关文章推荐
用js进行url编码后用php反解以及用php实现js的escape功能函数总结
Feb 08 PHP
PHP的array_diff()函数在处理大数组时的效率问题
Nov 27 PHP
Zend Framework中的简单工厂模式 图文
Jul 10 PHP
php和jquery实现地图区域数据统计展示数据示例
Feb 12 PHP
简单实用的网站PHP缓存类实例
Jul 18 PHP
php将远程图片保存到本地服务器的实现代码
Aug 03 PHP
php文件上传后端处理小技巧
May 22 PHP
php常用字符串String函数实例总结【转换,替换,计算,截取,加密】
Dec 07 PHP
PHP中大括号'{}'用法实例总结
Feb 08 PHP
PHP 实现浏览记录并按日期分组
May 11 PHP
laravel高级的Join语法详解以及使用Join多个条件
Oct 16 PHP
yii2.0框架场景的简单使用示例
Jan 25 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
dede3.1分页文字采集过滤规则详说(图文教程)续四
2007/04/03 PHP
将博客园(cnblogs.com)数据导入到wordpress的代码
2013/01/06 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
jquery.Ajax()方法调用Asp.Net后台的方法解析
2014/02/13 Javascript
HTML+CSS+JS实现完美兼容各大浏览器的TABLE固定列
2015/04/26 Javascript
jquery调整表格行tr上下顺序实例讲解
2016/01/09 Javascript
jQuery中的Deferred和promise 的区别
2016/04/03 Javascript
jQuery实现下拉菜单(内容为时间)的实时更新及图表的随动更新的方法
2016/07/07 Javascript
js HTML5上传示例代码完整版
2016/10/10 Javascript
web前端开发upload上传头像js示例代码
2016/10/22 Javascript
基于ES6 Array.of的用法(实例讲解)
2017/09/05 Javascript
layui表格checkbox选择全选样式及功能的实例
2018/03/07 Javascript
vue-rx的初步使用教程
2018/09/21 Javascript
JS中数据结构之栈
2019/01/01 Javascript
vue+iview/elementUi实现城市多选
2019/03/28 Javascript
详解一些适用于Node.js的命名约定
2019/12/08 Javascript
vue项目接口域名动态获取操作
2020/08/13 Javascript
[01:00:53]2018DOTA2亚洲邀请赛3月29日 小组赛B组 iG VS Secret
2018/03/30 DOTA
Python导入txt数据到mysql的方法
2015/04/08 Python
Python如何实现守护进程的方法示例
2017/02/08 Python
python 实现检验33品种数据是否是正态分布
2019/12/09 Python
Django接收照片储存文件的实例代码
2020/03/07 Python
Python PIL库图片灰化处理
2020/04/07 Python
python 实现表情识别
2020/11/21 Python
html5中地理位置定位api接口开发应用小结
2013/01/04 HTML / CSS
自动化职业生涯规划书范文
2014/01/03 职场文书
大跃进口号
2014/06/16 职场文书
注册资产评估专业求职信
2014/07/16 职场文书
市场营销工作计划书
2014/09/15 职场文书
公司授权委托书格式样本
2014/10/01 职场文书
2014年路政工作总结
2014/12/10 职场文书
Python基础之元编程知识总结
2021/05/23 Python
JavaScript分页组件使用方法详解
2021/07/26 Javascript
浅谈spring boot使用thymeleaf版本的问题
2021/08/04 Java/Android
以下牛机,你有几个
2022/04/05 无线电
js前端设计模式优化50%表单校验代码示例
2022/06/21 Javascript