dezsidog/laravel-change-way

通过头部更改分发的控制器

0.5.3 2018-05-22 02:50 UTC

This package is auto-updated.

Last update: 2024-09-17 19:57:45 UTC


README

License Build Status

通过头部更改分发的控制器。

英语不好

即将进行测试。

特性

重写Laravel控制器分发器,以便根据头部中的version字段来更改操作。

安装

composer require dezsidog/laravel-change-way

修改app/Http/Kernel.php中的基础类,从Illuminate\Foundation\Http\Kernel修改为Dezsidog\Http\Kernel

用法

编写路由实体

Route::get('test', "V1Controller@test");

Route::group(['version' => 'v2'], function(){
    Route::get('test', "V2Controller@test");
    Route::get('test2', "V2Controller@test2");
    Route::get('test3', "V1Controller@test");
});

创建控制器App\Http\Controllers\V1Controller

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class V1Controller extends Controller
{
    public function test()
    {
        return 'v1';
    }
}

创建控制器App\Http\Controllers\V2Controller

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class V2Controller extends Controller
{
    public function test()
    {
        return 'v2';
    }

    public function test2()
    {
        return 'v2';
    }
}

此包将根据头部中的version字段来决定使用哪个test方法。

public function testVersion()
    {
        $response = $this->getJson('api/test');
        
        $this->assertEquals('v1', $response->content());
        
        $response = $this->getJson('api/test',['version' => 'v2']);
        $this->assertEquals('v2', $response->content());

        $response = $this->getJson('api/test2', ['version' => 'v2']);
        $this->assertEquals('v2', $response->content());

        $response = $this->getJson('api/test2');
        $response->assertStatus(404);

        $response = $this->getJson('api/test3',['version' => 'v2']);
        $this->assertEquals('v1', $response->content());
    }