路由之进阶篇(五)
2019-10-14 本文已影响0人
寒云暮雨
这篇文章是路由的进阶篇,会教大家怎么实际运用路由
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 App\Http\Controllers\Web;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
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 App\Http\Controllers\Web;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
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 App\Http\Controllers\Web;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
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
