Laravel 分割 routes.php 路由文件的最佳方式

Laravel 的路由功能很强大, 路由规则默认都定义在 routes.php 文件中,但是随着项目越来越大, 我们需要的定义的规则越来越多, 如果几百上千个路由都定义在一个文件中, 如何去维护? 如果不同的人都在同一个文件定义路由, 这就造成了冲突, 因此我们有必要将 routes.php 文件分割成多个文件, 可以按照功能模块来划分, 下面介绍一种很优雅的方式.

Laravel 5.1 LTS 版本 app/Providers/RouteServiceProvider.phpmap 方法中可以如下定义:

<?php

namespace App\Providers;

use Illuminate\Routing\Router;  
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;  
use Route;

class RouteServiceProvider extends ServiceProvider  
{
    /**
     * This namespace is applied to the controller routes in your routes file.
     *
     * In addition, it is set as the URL generator's root namespace.
     *
     * @var string
     */
    protected $namespace = 'App\Http\Controllers';
    protected $api_namespace = 'App\Http\ApiControllers';

    /**
     * Define your route model bindings, pattern filters, etc.
     *
     * @param  \Illuminate\Routing\Router  $router
     * @return void
     */
    public function boot(Router $router)
    {
        $router->pattern('id', '[0-9]+');

        parent::boot($router);
    }

    /**
     * Define the routes for the application.
     *
     * @param  \Illuminate\Routing\Router  $router
     * @return void
     */
    public function map(Router $router)
    {
        $this->mapWebRoutes();
        $this->mapApiRoutes();
    }

    /**
     * Web 路由
     */
    protected function mapWebRoutes()
    {
        Route::group([
            'namespace' => $this->namespace,
            'middleware' => 'restrict_web_access',
        ], function ($router) {
            require base_path('routes/web.php');
        });
    }

    /**
     * Api 路由
     */
    protected function mapApiRoutes()
    {
        $api_router = app('Dingo\Api\Routing\Router');
        $api_router->group([
            'version'   => config('api.prefix'),
            'namespace' => $this->api_namespace,
        ], function ($router) {
            require base_path('routes/api.php');
        });
    }
}

文件夹结构如下:

file

通过把路由规则分割写到不同的文件中, 这样一来, 就可以根据功能模块分开管理路由文件了. 此外, 你也可以简单的分割, 直接把 routes.php 中的定义拆散成多个文件, 通过 require 的方式引入.

那么这样路由分开多个文件后岂不是增加调用次数, 会不会影响性能? 答案是不必担心. 通过 Laravel 的命令:

php artisan route:cache  

生成路由缓存文件后, 路由只会读取缓存文件的路由规则, 因此不会影响性能, 这样做让开发更高效和规范.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`routes.IgnoreRoute`、`routes.MapPageRoute`和`routes.MapRoute`是在ASP.NET中用于定义和配置路由规则的方法。它们之间的区别如下: 1. `routes.IgnoreRoute`:这个方法用于忽略某些URL,让它们不被路由系统处理。通常用于忽略某些特定的静态文件或资源,如图片、CSS文件、JavaScript文件等。示例用法如下: ```csharp routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); ``` 上述示例中,我们忽略了以`.axd`为扩展名的资源文件。 2. `routes.MapPageRoute`:这个方法用于定义并注册ASP.NET Web Forms页面的路由规则。它将指定的URL模式映射到实际的物理文件,并可传递参数给目标页面。示例用法如下: ```csharp routes.MapPageRoute("ProductDetails", "products/{category}/{id}", "~/ProductDetails.aspx"); ``` 上述示例中,我们定义了一个名为"ProductDetails"的路由规则,将匹配形如`/products/electronics/123`的URL,并将请求路由到物理文件`ProductDetails.aspx`。其中,`{category}`和`{id}`是路由参数。 3. `routes.MapRoute`:这个方法用于定义并注册ASP.NET MVC控制器和动作方法的路由规则。它将指定的URL模式映射到相应的控制器和动作方法。示例用法如下: ```csharp routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); ``` 上述示例中,我们定义了一个名为"Default"的路由规则,将匹配形如`/Home/Index`的URL,并将请求路由到名为`HomeController`的控制器的`Index`动作方法。其中,`{controller}`、`{action}`和`{id}`是路由参数,`HomeController`和`Index`是默认值。 总结来说,`routes.IgnoreRoute`用于忽略某些URL,`routes.MapPageRoute`用于定义Web Forms页面的路由规则,而`routes.MapRoute`用于定义MVC控制器和动作方法的路由规则。它们各自适用于不同的场景和技术。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值