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新手上路(二)
Oct 09 PHP
PHP Mysql编程之高级技巧
Aug 27 PHP
浅谈php serialize()与unserialize()的用法
Jun 05 PHP
php生成excel列名超过26列大于Z时的解决方法
Dec 29 PHP
PHP开发注意事项总结
Feb 04 PHP
php实现的mongodb操作类实例
Apr 03 PHP
PHP 常用的header头部定义汇总
Jun 19 PHP
php图片上传类 附调用方法
May 15 PHP
php表单加入Token防止重复提交的方法分析
Oct 10 PHP
PHP实现链表的定义与反转功能示例
Jun 09 PHP
PHP 文件上传限制问题
Sep 01 PHP
Centos7安装swoole扩展操作示例
Mar 26 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
评分9.0以上的动画电影,剧情除了经典还很燃
2020/03/04 日漫
php is_file 判断给定文件名是否为一个正常的文件
2010/05/10 PHP
解析php中反射的应用
2013/06/18 PHP
php实现的CSS更新类实例
2014/09/22 PHP
PHP的Yii框架中行为的定义与绑定方法讲解
2016/03/18 PHP
PHP实现的AES双向加密解密功能示例【128位】
2018/09/03 PHP
一直复略了的一个问题,关于表单重复提交
2007/02/15 Javascript
javascript让setInteval里的函数参数中的this指向特定的对象
2010/01/31 Javascript
Node.js:Windows7下搭建的Node.js服务(来玩玩服务器端的javascript吧,这可不是前端js插件)
2011/06/27 Javascript
window.open 以post方式传递参数示例代码
2014/02/27 Javascript
javascript实例--教你实现扑克牌洗牌功能
2014/05/15 Javascript
浅谈JavaScript Math和Number对象
2015/01/26 Javascript
BootStrap的select2既可以查询又可以输入的实现代码
2017/02/17 Javascript
JS校验与最终登陆界面功能完整示例
2020/01/13 Javascript
微信小程序实现watch监听
2020/06/04 Javascript
python使用fcntl模块实现程序加锁功能示例
2017/06/23 Python
python距离测量的方法
2018/03/06 Python
使用Python获取并处理IP的类型及格式方法
2018/11/01 Python
如何用Python做一个微信机器人自动拉群
2019/07/03 Python
Python参数类型以及常见的坑详解
2019/07/08 Python
Python argparse模块使用方法解析
2020/02/20 Python
浅谈ROC曲线的最佳阈值如何选取
2020/02/28 Python
python实现批处理文件
2020/07/28 Python
华为旗下电子商务平台:华为商城
2016/08/06 全球购物
如何利用cmp命令比较文件
2016/04/11 面试题
javascript实现用户必须勾选协议实例讲解
2021/03/24 Javascript
物业保安员岗位职责
2014/03/14 职场文书
毕业生如何写自我鉴定
2014/03/15 职场文书
病媒生物防治方案
2014/05/13 职场文书
安全宣传标语
2014/06/10 职场文书
员工趣味活动方案
2014/08/27 职场文书
大学毕业典礼演讲稿
2014/09/09 职场文书
医护人员继续教育学习心得体会
2016/01/19 职场文书
励志正能量20句:送给所有为梦想拼搏的人
2019/11/11 职场文书
mysql主从复制的实现步骤
2021/10/24 MySQL
《黑岩★★射手 DAWN FALL》BD发售宣传CM公开
2022/04/04 日漫