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 相关文章推荐
从一个不错的留言本弄的mysql数据库操作类
Sep 02 PHP
使用zend studio for eclipse不能激活代码提示功能的解决办法
Oct 11 PHP
php中mysql模块部分功能的简单封装
Sep 30 PHP
PHP序列号生成函数和字符串替换函数代码
Jun 07 PHP
PHP daddslashes 使用方法介绍
Oct 26 PHP
从零开始学YII2框架(四)扩展插件yii2-kartikgii
Aug 20 PHP
php保存信息到当前Session的方法
Mar 16 PHP
使用PHP处理数据库数据如何将数据返回客户端并显示当前状态
Feb 16 PHP
yii2实现分页,带搜索的分页功能示例
Jan 07 PHP
CodeIgniter框架常见用法工作总结
Mar 16 PHP
PHP实现15位身份证号转18位的方法分析
Oct 16 PHP
laravel使用数据库测试注意事项
Apr 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
初识laravel5
2015/03/02 PHP
PHP实现的构造sql语句类实例
2016/02/03 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
2018/02/07 PHP
php微信开发之谷歌测距
2018/06/14 PHP
JavaScript TO HTML 转换
2006/06/26 Javascript
JavaScript 学习笔记一些小技巧
2010/03/28 Javascript
Json字符串转换为JS对象的高效方法实例
2013/05/01 Javascript
IE浏览器中图片onload事件无效的解决方法
2014/04/29 Javascript
JavaScript设计模式之外观模式介绍
2014/12/28 Javascript
javascript中错误使用var造成undefined
2016/03/31 Javascript
关于List.ToArray()方法的效率测试
2016/09/30 Javascript
js中split()方法得到的数组长度问题
2018/07/19 Javascript
jQuery仿移动端支付宝键盘的实现代码
2018/08/15 jQuery
如何解决webpack-dev-server代理常切换问题
2019/01/09 Javascript
详解js加减乘除精确计算
2019/03/19 Javascript
VUE的history模式下除了index外其他路由404报错解决办法
2019/08/21 Javascript
vue 实现锚点功能操作
2020/08/10 Javascript
[01:14:35]DOTA2上海特级锦标赛B组资格赛#1 Alliance VS Fnatic第一局
2016/02/26 DOTA
深入分析在Python模块顶层运行的代码引起的一个Bug
2014/07/04 Python
Python常用内置函数总结
2015/02/08 Python
Python使用遗传算法解决最大流问题
2018/01/29 Python
python如何定义带参数的装饰器
2018/03/20 Python
用Python3创建httpServer的简单方法
2018/06/04 Python
python多进程控制学习小结
2018/10/31 Python
Python字符串的一些操作方法总结
2019/06/10 Python
简单瞅瞅Python vars()内置函数的实现
2019/09/27 Python
基于python爬取有道翻译过程图解
2020/03/31 Python
Jupyter Notebook 实现正常显示中文和负号
2020/04/24 Python
使用Numpy对特征中的异常值进行替换及条件替换方式
2020/06/08 Python
浅谈移动端网页图片预加载方案
2018/11/05 HTML / CSS
英国家喻户晓的家居商店:The Range
2019/03/25 全球购物
亿阳信通股份有限公司C#笔试题
2016/12/06 面试题
优秀班主任材料
2014/12/16 职场文书
写给老师的保证书
2015/05/09 职场文书
动漫APP软件排行榜前十名,半次元上榜,第一款由腾讯公司推出
2022/03/18 杂记
了解MySQL查询语句执行过程(5大组件)
2022/08/14 MySQL