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脚本的10个技巧(7)
Oct 09 PHP
备份mysql数据库的php代码(一个表一个文件)
May 28 PHP
php mysql 判断update之后是否更新了的方法
Jan 10 PHP
基于ubuntu下nginx+php+mysql安装配置的具体操作步骤
Apr 28 PHP
PHP URL路由类实例
Nov 12 PHP
destoon安全设置中需要设置可写权限的目录及文件
Jun 21 PHP
ThinkPHP中自定义目录结构的设置方法
Aug 15 PHP
PHP新建类问题分析及解决思路
Nov 19 PHP
PHP实现微信网页授权开发教程
Jan 19 PHP
PHP多进程编程之僵尸进程问题的理解
Oct 15 PHP
PHP实现登录验证码校验功能
May 17 PHP
php多进程中的阻塞与非阻塞操作实例分析
Mar 04 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
咖啡店都有些什么常规豆子呢?有什么风味在里面
2021/03/04 咖啡文化
php之Smarty模板使用方法示例详解
2014/07/08 PHP
php的mssql数据库连接类实例
2014/11/28 PHP
CentOS 安装 PHP5.5+Redis+XDebug+Nginx+MySQL全纪录
2015/03/25 PHP
PHP序列化/对象注入漏洞分析
2016/04/18 PHP
php实现的简单中文验证码功能示例
2017/01/03 PHP
PHP生成各种随机验证码的方法总结【附demo源码】
2017/06/05 PHP
php 输出缓冲 Output Control用法实例详解
2020/03/03 PHP
javascript addBookmark 加入收藏 多浏览器兼容
2009/08/15 Javascript
模仿JQuery.extend函数扩展自己对象的js代码
2009/12/09 Javascript
15条JavaScript最佳实践小结
2013/08/09 Javascript
javascript文件中引用依赖的js文件的方法
2014/03/17 Javascript
JavaScript中检查对象property的存在性方法介绍
2014/12/30 Javascript
初识Node.js
2015/03/20 Javascript
如何使用jQuery技术开发ios风格的页面导航菜单
2015/07/29 Javascript
AngularJs学习第八篇 过滤器filter创建
2016/06/08 Javascript
AngularJS基础 ng-keydown 指令简单示例
2016/08/02 Javascript
JS高仿抛物线加入购物车特效实现代码
2017/02/20 Javascript
二维码图片生成器QRCode.js简单介绍
2017/08/18 Javascript
Vue中定义全局变量与常量的各种方式详解
2017/08/23 Javascript
JS监控关闭浏览器操作的实例详解
2017/09/12 Javascript
react-native使用leanclound消息推送的方法
2018/08/06 Javascript
区别JavaScript函数声明与变量声明
2018/09/12 Javascript
搭建一个Koa后端项目脚手架的方法步骤
2019/05/30 Javascript
js实现随机点名程序
2020/09/17 Javascript
在react项目中使用antd的form组件,动态设置input框的值
2020/10/24 Javascript
react ant Design手动设置表单的值操作
2020/10/31 Javascript
[05:05]DOTA2亚洲邀请赛 战队出场仪式
2015/02/07 DOTA
Python写的PHPMyAdmin暴力破解工具代码
2014/08/06 Python
深入学习Python中的上下文管理器与else块
2017/08/27 Python
python通过txt文件批量安装依赖包的实现步骤
2019/08/13 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧装饰器信号与槽详细使用方法与实例
2020/03/06 Python
利用Python实现字幕挂载(把字幕文件与视频合并)思路详解
2020/10/21 Python
大一自我鉴定范文
2013/12/27 职场文书
六一儿童节开幕词
2015/01/29 职场文书
Python字典和列表性能之间的比较
2021/06/07 Python