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 图片文件上传实现代码
Dec 29 PHP
php的POSIX 函数以及进程测试的深入分析
Jun 03 PHP
PHP截断标题且兼容utf8和gb2312编码
Sep 22 PHP
跟我学Laravel之配置Laravel
Oct 15 PHP
PHP中使用循环实现的金字塔图形
Nov 08 PHP
php中删除数组的第一个元素和最后一个元素的函数
Mar 07 PHP
WIFI万能钥匙密码查询接口实例
Sep 28 PHP
PHP图像裁剪缩略裁切类源码及使用方法
Jan 07 PHP
Thinkphp框架 表单自动验证登录注册 ajax自动验证登录注册
Dec 27 PHP
PHP 二维关联数组根据其中一个字段排序(推荐)
Apr 04 PHP
php插件Xajax使用方法详解
Aug 31 PHP
Laravel关系模型指定条件查询方法
Oct 10 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
Yii2中Restful API原理实例分析
2016/07/25 PHP
php事务回滚简单实现方法示例
2017/03/28 PHP
PHP多进程通信-消息队列使用
2019/03/08 PHP
PHP中用Trait封装单例模式的实现
2019/12/18 PHP
php + ajax 实现的写入数据库操作简单示例
2020/05/16 PHP
javascript的事件描述
2006/09/08 Javascript
Hutia 的 JS 代码集
2006/10/24 Javascript
javascript XMLHttpRequest对象全面剖析
2010/04/24 Javascript
JS实现日期加减的方法
2013/11/29 Javascript
超简单JS二级、多级联动的简单实例
2014/02/18 Javascript
jQuery统计上传文件大小的方法
2015/01/24 Javascript
javascript计时器详解
2015/02/28 Javascript
js实现的Easy Tabs选项卡用法实例
2015/09/06 Javascript
JavaScript实现的多种鼠标拖放效果
2015/11/03 Javascript
jQuery实现批量判断表单中文本框非空的方法(2种方法)
2015/12/09 Javascript
AngularJS模块详解及示例代码
2016/08/17 Javascript
vue.js 图片上传并预览及图片更换功能的实现代码
2018/08/27 Javascript
jQuery中each遍历的三种方法实例分析
2018/09/07 jQuery
webpack 静态资源集中输出的方法示例
2018/11/09 Javascript
微信小程序学习笔记之目录结构、基本配置图文详解
2019/03/28 Javascript
JavaScript 几种循环方式以及模块化的总结
2020/09/03 Javascript
python表格存取的方法
2018/03/07 Python
Python根据指定日期计算后n天,前n天是哪一天的方法
2018/05/29 Python
python用opencv批量截取图像指定区域的方法
2019/01/24 Python
pyqt 实现QlineEdit 输入密码显示成圆点的方法
2019/06/24 Python
python使用pip安装SciPy、SymPy、matplotlib教程
2019/11/20 Python
解决python web项目意外关闭,但占用端口的问题
2019/12/17 Python
keras 自定义loss损失函数,sample在loss上的加权和metric详解
2020/05/23 Python
Python实现清理微信僵尸粉功能示例【基于itchat模块】
2020/05/29 Python
俄罗斯金苹果网上化妆品和香水商店:Goldapple
2019/12/01 全球购物
编写一子程序,将一链表倒序,即使链表表尾变表头,表头变表尾
2016/02/10 面试题
2019年c语言经典面试题目
2016/08/17 面试题
告诉你怎样写创业计划书
2014/01/27 职场文书
药品营销策划方案
2014/06/15 职场文书
毕业感言怎么写
2015/07/31 职场文书
学校隐患排查制度
2015/08/05 职场文书