当前位置:首页 > 技术 > 正文内容

Laravel 路由系统详解

访客 技术 5

在 Laravel 框架中,路由定义了应用程序的端点,处理用户的 HTTP 请求并返回响应。路由配置文件通常位于 routes/web.php

基本路由定义 最基础的路由使用 HTTP 方法(如 get, post)和闭包函数定义。

Route::get('/greeting', function () {
    return '欢迎访问!';
});

Route::post('/submit', function () {
    return '数据已提交';
});

Route::any('/universal', function () {
    return '处理任何 HTTP 方法';
});

控制器方法路由 可以将请求直接路由到控制器类的方法。

use App\Http\Controllers\UserController;

Route::get('/profile', [UserController::class, 'displayProfile']);

路由参数 路由可以包含必需或可选参数,这些参数将传递给处理闭包或控制器方法。

// 必需参数
Route::get('/employee/{id}', function ($employeeId) {
    return '员工 ID: ' . $employeeId;
});

// 可选参数
Route::get('/customer/{name?}', function ($customerName = '访客') {
    return '您好, ' . $customerName;
});

路由参数约束 可以为路由参数添加验证规则,确保参数格式符合预期。

// 使用正则表达式约束
Route::get('/product/{code}', function ($productCode) {
    //
})->where('code', '[A-Z]{2}[0-9]{4}');

// 使用约束辅助方法
Route::get('/order/{number}', function ($orderNumber) {
    //
})->whereNumber('number');

Route::get('/category/{slug}', function ($categorySlug) {
    //
})->whereAlpha('slug');

Route::get('/document/{uuid}', function ($documentUuid) {
    //
})->whereUuid('uuid');

Route::get('/status/{state}', function ($state) {
    //
})->whereIn('state', ['active', 'pending', 'archived']);

命名路由 为路由指定名称便于在应用程序其他部分引用。

Route::get('/articles/{slug}', [ArticleController::class, 'show'])->name('articles.detail');

路由分组 将具有共同特征的路由分组,便于应用中间件、前缀等共享属性。

// 应用中间件分组
Route::middleware(['auth', 'verified'])->group(function () {
    Route::get('/settings', function () {
        return '设置页面';
    });
    Route::get('/notifications', function () {
        return '通知中心';
    });
});

// 应用路径前缀分组
Route::prefix('admin')->group(function () {
    Route::get('/panel', function () {
        // 处理路径 /admin/panel
    });
    Route::get('/reports', function () {
        // 处理路径 /admin/reports
    });
});

子域名路由 可以为不同的子域名定义路由规则。

Route::domain('api.application.com')->group(function () {
    Route::get('/status', function () {
        return 'API 服务运行正常';
    });
});

// 参数化子域名
Route::domain('{team}.application.com')->group(function () {
    Route::get('/projects', function ($team) {
        return $team . ' 团队的项目列表';
    });
});

回退路由 当没有任何路由匹配请求时,将执行回退路由。

Route::fallback(function () {
    return response()->json(['error' => '未找到请求的资源'], 404);
});

签名路由 签名路由用于生成具有安全签名的 URL,常用于密码重置、邀请等场景。

// 定义签名路由
Route::get('/verify/{token}/{action}', VerificationController::class, 'process')->name('verification.link');

// 生成签名 URL
$secureUrl = URL::signedRoute('verification.link', ['token' => $token, 'action' => 'confirm']);

// 生成临时签名 URL(带过期时间)
$temporaryUrl = URL::temporarySignedRoute('verification.link', now()->addMinutes(30), ['token' => $token, 'action' => 'confirm']);

VerificationController.php 示例

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Routing\Exceptions\InvalidSignatureException;

class VerificationController extends Controller
{
    public function process(Request $request, $token, $action)
    {
        if (!$request->hasValidSignature()) {
            throw new InvalidSignatureException;
        }

        // 验证逻辑
        return "验证令牌: {$token}, 执行操作: {$action}";
    }
}

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。