路由文件:/routes/web.php
<?php
use Illuminate\Support\Facades\Route;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/', function () {
return view('welcome');
});
/**
* 常用的路由方法
*/
# GET 方式,除了GET方式,其他方式的路由都需要在 VerifyCsrfToken 添加白名单
Route::get('lyget', function () {
return '路由GET方法';
});
# POST 方式
Route::post('lypost', function () {
return '路由POST方法';
});
# match 方法,限定什么方式访问
Route::match(['get','post'],'lymatch', function() {
return '路由Match方法';
});
# any 方法,任意方式都可以访问,除了 GET 方法外,其他方法都需要添加白名单
Route::any('lyany',function(){
return '路由any方法';
});
/**
* 路由参数
*/
# get 方式,带参数
Route::get('lygetcs1/{name}',function($name){
return $name;
});
# get 方式,多个参数,function 内不按名称只按顺序排列
Route::get('lygetcs2/{name}/{age}',function($cs1,$cs2){
return '我是'.$cs1.',今年'.$cs2.'岁了。';
});
# get 方式,可选参数在后面加?,如果URL上面不给参数 function 内的变量需要加默认值
Route::get('lygetcs3/{name?}/{age?}',function($name='',$age=''){
return '第一个参数:'.$name.';第二个参数:'.$age;
});
# 如果参数内有必要的参数,那么在必要的参数前的可选参数也需要给值
Route::get('lygetcs4/{name?}/{sex}/{age?}',function($name='',$sex,$age=''){
return '第一个参数:'.$name.';第二个参数:'.$sex.';第三个参数:'.$age;
});
/**
* 路由参数匹配
*/
# 规定 name 值是大写的 A - Z 的字母
Route::get('lypp1/{name}',function($name){
return '我叫'.$name;
})->where('name','[A-Z]+');
# 规定 name 值是小写的 a - z 的字母,age 值是 0 - 2 的数字
Route::get('lypp2/{name}/{age}',function($name,$age){
return '我叫'.$name.';今年'.$age;
})->where('name','[a-z]+')->where('age','[0-2]+');
# 与上面的一样表达方式,只是 where 条件使用数组的形式
Route::get('lypp3/{name}/{age}',function($name,$age){
return '我叫'.$name.';今年'.$age;
})->where(['name'=>'[a-z]+','age'=>'[0-2]+']);
/**
* 路由全局约束
*/
# 1.找到路径:app/Providers/RouteServiceProvider.php
# 2.在 boot 方法里面添加全局约束 Route::pattern('name','[A-Z]+'); 限定name值为大写的 A-Z
Route::get('lyqj1/{name}',function($name){
return '我叫:'.$name;
});
# 两个全局方法都测试,都是被限定name值为大写的 A-Z
Route::get('lyqj2/{name}',function($name){
return '我叫:'.$name;
});
/**
* 路由组
*/
# 路由组就是把 lyz1 lyz2 lyz3 的方法包含在 admin 内组成一个组
# 访问需要经过 admin(名称自定义) ,否则访问不了,例如:laravel.com/admin/lyz1
Route::prefix('admin')->group(function(){
Route::get('lyz1',function(){
return "我是路由组 one";
});
Route::get('lyz2',function(){
return "我是路由组 two";
});
Route::get('lyz3',function(){
return "我是路由组 three";
});
});
/**
* 路由名
*/
# 1. 将 lym1 的路由方法定义一个名称为 lym
# 2. 访问 lym2 的重定向到路由名,将会跳转到 lym1 路由方法去
Route::get('lym1',function(){
return "我是通过路由名访问的";
})->name('lym');
Route::get('lym2',function(){
return redirect()->route('lym');
});
/**
* 路由名前缀
*/
# 1.定义一个路由名前缀组,admin 建议加个 . 或 _ ;容易区分
Route::name('admin.')->group(function(){
Route::get('lymqz1',function(){
return "我是路由名前缀 one";
})->name('lyms1');
Route::get('lymqz2',function(){
return "我是路由名前缀 two";
})->name('lyms2');
Route::get('lymqz3',function(){
return "我是路由名前缀 three";
})->name('lyms3');
});
# 然后通过 lymcc 重定向到路由名
Route::get('lymcc',function(){
return redirect()->route('admin.lyms2');
});
/**
*路由域名检测
*/
Route::domain('baidu.com')->group(function(){
Route::get('lyym1',function(){
return "路由域名检测";
});
});
# 访问需要域名为:blog.com ; 例如:blog.com/admin/lysz
Route::group(['prefix'=>'admin','domain'=>'blog.com'],function(){
Route::get('lysz',function(){
return "数组方式检测";
});
});
/**
* 中间件路由
* 使用到中间件的路由,可以在中间件里面做一些限制操作
*/
# 1. 创建中间件:php artisan make:middleware 中间件名称(Test)
# 2. 编写中间件:要写到 return $next($request); 之前
# 3. 注册中间件 blog\app\Http\Kernel.php 的$routeMiddleware中注册对应的中间件
# 4. 使用中间件: 中间件别名(test)
Route::middleware('test')->group(function(){
Route::get('lyzjj',function(){
return "路由中间件";
});
});
中间件文件:app/Http/Middleware/Test.php
<?php
namespace App\Http\Middleware;
use Closure;
class Test
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
echo 'Test 路由中间件检测点';
return $next($request);
}
}
注册中间件文件:app/Http/Kernel.php
注意:这边定义的 test 名称与使用中间件名称一致