网络知识 娱乐 路由之进阶篇(五)

路由之进阶篇(五)

这篇文章是路由的进阶篇,会教大家怎么实际运用路由

1、命名路由

路由结构如下

Route::get('/', 'IndexController@index');
Route::get('/register', 'IndexController@register')->name('register');
Route::group(['middleware' => ['auth']], function () {
    Route::post('/add', 'IndexController@add');
});

执行查看路由的命令,查看我们的路由,着重看红色线框部分,我们有了一个以register命名的路由

php artisan route:list
路由

2、路由参数

路由结构如下

Route::get('/', 'IndexController@index');
Route::get('/register', 'IndexController@register')->name('register');
Route::get('/user/{name}', 'IndexController@user');
Route::group(['middleware' => ['auth']], function () {
    Route::post('/add', 'IndexController@add');
});

控制器代码如下

<?php

namespace AppHttpControllersWeb;

use AppHttpControllersController;
use IlluminateHttpRequest;

class IndexController extends Controller
{
    //
    public function index()
    {
        return view('welcome');
    }

    public function add(Request $request)
    {
        return $request->all();
    }

    public function register()
    {

    }

    public function user($user)
    {
        return [$user];
    }
}

我们新定义了/user/{name}路由,这个路由有个参数name,同时我们在控制器的user方法中接口参数并返回,采用postman做测试,我们的请求地址http://127.0.0.1:8000/user/hanyun,你也可以http://127.0.0.1:8000/user/lilei,根据实际情况传递路由参数

3、路由可选参数

有的时候你想你的路由有个可选参数,没有的话给个默认值,例如

Route::get('/', 'IndexController@index');
Route::get('/register', 'IndexController@register')->name('register');
Route::get('/user/{name}', 'IndexController@user');
Route::get('/user/{name?}', 'IndexController@getUserByName');
Route::group(['middleware' => ['auth']], function () {
    Route::post('/add', 'IndexController@add');
});

控制器代码如下

<?php

namespace AppHttpControllersWeb;

use AppHttpControllersController;
use IlluminateHttpRequest;

class IndexController extends Controller
{
    //
    public function index()
    {
        return view('welcome');
    }

    public function add(Request $request)
    {
        return $request->all();
    }

    public function register()
    {

    }

    public function user($user)
    {
        return [$user];
    }

    public function getUserByName($name='hanyun')
    {
        return [$name];
    }
}

使用postman模拟请求

在这个例子当中,我们定义了一个路由/user/{name?},这个name参数是可选的,一定不要忘记了后面的‘’?‘’。我们发现我们并没有给路由传递参数,但是依旧有个默认值返回。

4、正则路由

有的时候我们希望我们的路由参数受到约束,那么我们可以采用正则路由,约数路由参数。修改我们的代码 路由

Route::get('/', 'IndexController@index');
Route::get('/register', 'IndexController@register')->name('register');
Route::get('/user/{userId}', 'IndexController@getUseById')->where('userId', '[0-9]+');
Route::group(['middleware' => ['auth']], function () {
    Route::post('/add', 'IndexController@add');
});

控制器

<?php

namespace AppHttpControllersWeb;

use AppHttpControllersController;
use IlluminateHttpRequest;

class IndexController extends Controller
{
    //
    public function index()
    {
        return view('welcome');
    }

    public function add(Request $request)
    {
        return $request->all();
    }

    public function register()
    {

    }

    public function getUseById($userId)
    {
        return [$userId,
        ];
    }
}

这里我们限制了我们的路由为数字,如果不是数字就会返回404页面,例如:/user/1,用postman请求

5、路由前缀

有时候我们想给路由增加前缀进行区分,我们可以给单个路由增加前缀,一个可以给路由组增加前缀,路由组下面所有的都会有一个公用的前缀

Route::get('/', 'IndexController@index');
Route::get('/register', 'IndexController@register')->name('register');
Route::prefix('prefix')->get('/user/{userId}', 'IndexController@getUseById')->where('userId', '[0-9]+');
Route::group(['middleware' => ['auth'], 'prefix' => 'group/prefix'], function () {
    Route::get('/user/{userId}', 'IndexController@getUseById')->where('userId', '[0-9]+');
});

执行命令

php artisan route:list