IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> Laravel框架路由讲解与中间件的使用 -> 正文阅读

[PHP知识库]Laravel框架路由讲解与中间件的使用


路由文件:/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 名称与使用中间件名称一致
在这里插入图片描述




  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-08-18 12:29:47  更:2021-08-18 12:30:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 16:25:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码