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中拷贝构造函数、赋值运算符重载
Jul 25 PHP
php中将数组转成字符串并保存到数据库中的函数代码
Sep 29 PHP
PHP小教程之实现双向链表
Jun 12 PHP
浅析ThinkPHP的模板输出功能
Jul 01 PHP
php中动态变量用法实例
Jun 10 PHP
PHP获取文件扩展名的4种方法
Nov 24 PHP
Zend Framework动作助手Redirector用法实例详解
Mar 05 PHP
Yii2创建表单(ActiveForm)方法详解
Jul 23 PHP
PHP使用Redis替代文件存储Session的方法
Feb 15 PHP
PHP的new static和new self的区别与使用
Nov 27 PHP
ThinkPHP 5 AJAX跨域请求头设置实现过程解析
Oct 28 PHP
常见的5个PHP编码小陋习以及优化实例讲解
Feb 27 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
WinXP + Apache +PHP5 + MySQL + phpMyAdmin安装全功略
2006/07/09 PHP
PHP 程序员的调试技术小结
2009/11/15 PHP
那些年一起学习的PHP(一)
2012/03/21 PHP
php mysql_real_escape_string addslashes及mysql绑定参数防SQL注入攻击
2016/12/23 PHP
php及codeigniter使用session-cookie的方法(详解)
2017/04/06 PHP
jQuery动态添加删除select项(实现代码)
2013/09/03 Javascript
使用Jquery获取带特殊符号的ID 标签的方法
2014/04/30 Javascript
浅谈JavaScript异常处理语句
2015/06/26 Javascript
分离与继承的思想实现图片上传后的预览功能:ImageUploadView
2016/04/07 Javascript
Ajax+FormData+javascript实现无刷新表单信息提交
2016/10/24 Javascript
jQuery插件DataTable使用方法详解(.Net平台)
2016/12/22 Javascript
深入nodejs中流(stream)的理解
2017/03/27 NodeJs
NodeJS实现微信公众号关注后自动回复功能
2017/05/31 NodeJs
JavaScript递归算法生成树形菜单
2017/08/15 Javascript
基于canvas粒子系统的构建详解
2017/08/31 Javascript
基于React Native 0.52实现轮播图效果
2020/08/25 Javascript
浅谈vue-props的default写不写有什么区别
2020/08/09 Javascript
[12:51]71泪洒现场!是DOTA2让经典重现
2014/03/24 DOTA
[01:34:42]NAVI vs EG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
[01:16:37]【全国守擂赛】第三周决赛 Dark Knight vs. 一个弱队
2020/05/04 DOTA
[01:02:00]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第三场 1月24日
2021/03/11 DOTA
Python的Django框架中if标签的相关使用
2015/07/15 Python
win10环境下python3.5安装步骤图文教程
2017/02/03 Python
详解python中的装饰器
2018/07/10 Python
Python实现批量执行同目录下的py文件方法
2019/01/11 Python
Python list与NumPy array 区分详解
2019/11/06 Python
使用IPython或Spyder将省略号表示的内容完整输出
2020/04/20 Python
keras使用Sequence类调用大规模数据集进行训练的实现
2020/06/22 Python
纯CSS打造(无图像无js)的非常流行的讲话(语音)气泡效果
2012/12/28 HTML / CSS
来自圣地亚哥的实惠太阳镜:Knockaround
2018/08/27 全球购物
小车司机岗位职责
2013/11/25 职场文书
出国签证在职证明
2014/01/16 职场文书
高中军训感言600字
2014/03/11 职场文书
学习实践科学发展观心得体会
2014/09/10 职场文书
答辩状格式范本
2015/05/22 职场文书
三好学生主要事迹怎么写
2015/11/03 职场文书