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 相关文章推荐
Smarty安装配置方法
Apr 10 PHP
php生成随机数或者字符串的代码
Sep 05 PHP
php合并数组array_merge函数运算符加号与的区别
Oct 31 PHP
关于Sphinx创建全文检索的索引介绍
Jun 25 PHP
php将mysql数据库整库导出生成sql文件的具体实现
Jan 08 PHP
ThinkPHP自动填充实现无限级分类的方法
Aug 22 PHP
初识PHP中的Swoole
Apr 05 PHP
PHP中功能强大却很少使用的函数实例小结
Nov 10 PHP
php基于 swoole 实现的异步处理任务功能示例
Aug 13 PHP
laravel 配置路由 api和web定义的路由的区别详解
Sep 03 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
PHP最常用的ini函数分析 针对PHP.ini配置文件
2010/04/22 PHP
兼容Mozilla必须知道的知识。
2007/01/09 Javascript
可以显示单图片,多图片ajax请求的ThickBox3.1类下载
2007/12/23 Javascript
javascript使用activex控件的代码
2011/01/27 Javascript
JS 模态对话框和非模态对话框操作技巧汇总
2013/04/15 Javascript
在页面加载完成后通过jquery给多个span赋值
2014/05/21 Javascript
javascript 构造函数方式定义对象
2015/01/02 Javascript
实例详解JSON数据格式及json格式数据域字符串相互转换
2016/01/07 Javascript
jQuery CSS3自定义美化Checkbox实现代码
2016/05/12 Javascript
JavaScript将DOM事件处理程序封装为event.js 出现的低级错误问题
2016/08/03 Javascript
利用jQuery实现打字机字幕效果实例代码
2016/09/02 Javascript
jQuery中ScrollTo用法示例
2016/09/04 Javascript
了解VUE的render函数的使用
2017/06/08 Javascript
详解Angular之constructor和ngOnInit差异及适用场景
2017/06/22 Javascript
mac上node.js环境的安装测试
2017/07/03 Javascript
Node层模拟实现multipart表单的文件上传示例
2018/01/02 Javascript
JavaScript判断对象和数组的两种方法
2019/05/31 Javascript
JQuery Ajax如何实现注册检测用户名
2020/09/25 jQuery
利用vue3+ts实现管理后台(增删改查)
2020/10/30 Javascript
适用于 Vue 的播放器组件Vue-Video-Player操作
2020/11/16 Javascript
完美解决python针对hdfs上传和下载的问题
2020/06/05 Python
Python如何把字典写入到CSV文件的方法示例
2020/08/23 Python
python 使用paramiko模块进行封装,远程操作linux主机的示例代码
2020/12/03 Python
关于老式浏览器兼容HTML5和CSS3的问题
2016/06/01 HTML / CSS
AmazeUI导航的示例代码
2020/08/14 HTML / CSS
英国建筑用品在线:Building Supplies Online(BSO)
2018/04/30 全球购物
美国保健品专家:Life Extension
2018/05/04 全球购物
商学院大学生求职的自我评价
2014/03/12 职场文书
基层党支部公开承诺书
2014/05/29 职场文书
庆六一活动总结
2014/08/29 职场文书
三潭印月的导游词
2015/02/12 职场文书
2015年技术员工作总结
2015/04/10 职场文书
大学生学生会工作总结2015
2015/05/26 职场文书
老人与海读书笔记
2015/06/26 职场文书
2016优秀大学生个人事迹材料范文
2016/03/01 职场文书
Android中的Launch Mode详情
2022/06/05 Java/Android