最为常用的Laravel操作(2)-路由

简介: 整理了 Laravel 框架路由最常用的操作,如路由参数、路由群组、中间件等。本系列共有 3 篇文章。

基本路由

// 接收一个 URI 和一个闭包
Route::get('hello', function () {
   
    return 'Hello, Laravel';
});

// 支持的路由方法
Route::get({
   mathJaxContainer[0]}callback);
Route::post({
   mathJaxContainer[1]}callback);
Route::put({
   mathJaxContainer[2]}callback);
Route::patch({
   mathJaxContainer[3]}callback);
Route::delete({
   mathJaxContainer[4]}callback);
Route::options({
   mathJaxContainer[5]}callback);

// 支持多个路由方法
Route::match(['get', 'post'], '/', function () {
   
    //
});

// 注册所有路由方法
Route::any('foo', function () {
   
    //
});

路由参数

  • 使用花括号包裹
  • 路由参数不能包含 - 字符, 需要的话可以使用 _ 替代
// 捕获用户 ID
Route::get('user/{id}', function ($id) {
   
    return 'User '.$id;
});

// 捕获多个参数
Route::get('posts/{post}/comments/{comment}', function ({
   mathJaxContainer[6]}commentId) {
   
    //
});

// 可选参数
Route::get('user/{name?}', function ($name = null) {
   
    return $name;
});
Route::get('user/{name?}', function ($name = 'John') {
   
    return $name;
});

// 正则约束
Route::get('user/{name}', function ($name) {
   
    //
})->where('name', '[A-Za-z]+');

Route::get('user/{id}', function ($id) {
   
    //
})->where('id', '[0-9]+');

Route::get('user/{id}/{name}', function ({
   mathJaxContainer[7]}name) {
   
    //
})->where(['id' => '[0-9]+', 'name' => '[a-z]+']);

命名路由

// 为路由闭包指定名称
Route::get('user/profile', function () {
   
    //
})->name('profile');

// 为控制器操作指定名称
Route::get('user/profile', 'UserController@showProfile')->name('profile');

// 使用命名路由生成 URL: 不带参数
$url = route('profile');
return redirect()->route('profile');

// 使用命名路由生成 URL: 附带参数
Route::get('user/{id}/profile', function ($id) {
   
    //
})->name('profile');
$url = route('profile', ['id' => 1]);

路由群组

中间件

Route::group(['middleware' => 'auth'], function () {
   
    Route::get('/', function () {
   
        // 使用 Auth 中间件
    });
    Route::get('user/profile', function () {
   
        // 使用 Auth 中间件
    });
});

命名空间

Route::group(['namespace' => 'Admin'], function(){
   
    // 控制器在 "App\Http\Controllers\Admin" 命名空间下
});

子域名路由

Route::group(['domain' => '{account}.myapp.com'], function () {
   
    Route::get('user/{id}', function ({
   mathJaxContainer[8]}id) {
   
        //
    });
});

路由前缀

Route::group(['prefix' => 'admin'], function () {
   
    Route::get('users', function () {
   
        // 匹配 "/admin/users" URL
    });
});

表单方法伪造

<form action="/foo/bar" method="POST">
    <input type="hidden" name="_method" value="PUT">
    <input type="hidden" name="_token" value="{
    { csrf_token() }}">
</form>

或使用辅助函数 method_field :

{
  { method_field('PUT') }}

访问当前路由

$route  = Route::current();
$name   = Route::currentRouteName();
$action = Route::currentRouteAction();

路由缓存

# 添加路由缓存
php artisan route:cache
# 移除路由缓存
php artisan route:clear

路由模型绑定

隐式绑定

// {user} 与 $user 绑定, 如果数据库中找不到对应的模型实例, 会自动生成 HTTP 404 响应
Route::get('api/users/{user}', function (App\User $user) {
   
    return $user->email;
});

// 自定义键名: 重写模型 getRouteKeyName 方法
/**
 * Get the route key for the model.
 *
 * @return string
 */
public function getRouteKeyName()
{
   
    return 'slug';
}

显式绑定

要注册显式绑定, 需要使用路由的 model 方法来为给定参数指定绑定类. 应该在 RouteServiceProvider 类的 boot 方法中定义模型绑定:

public function boot()
{
   
    parent::boot();
    Route::model('user', App\User::class);
}

定义一个包含 {user} 参数的路由:

{
   mathJaxContainer[9]}user) {
   
    //
});

如果请求 URLprofile/1, 就会注入一个用户 ID1User 实例, 如果匹配的模型实例在数据库不存在, 会自动生成并返回 HTTP 404 响应.

自定义解析逻辑

如果你想要使用自定义的解析逻辑, 需要使用 Route::bind 方法, 传递到 bind 方法的闭包会获取到 URI 请求参数中的值, 并且返回你想要在该路由中注入的类实例:

public function boot()
{
   
    parent::boot();
    Route::bind('user', function($value) {
   
        return App\User::where('name', $value)->first();
    });
}

文章来源于本人博客,发布于 2018-06-02,原文链接:https://imlht.com/archives/155/

目录
相关文章
|
机器学习/深度学习 传感器 人工智能
构建未来:AI技术在智能交通系统中的应用
【5月更文挑战第30天】 在快速发展的人工智能领域,智能交通系统作为一个高度集成了多种AI技术的应用平台,正在逐步改变我们的出行方式。本文将深入探讨AI技术在智能交通系统中的关键作用,包括实时数据分析、预测模型构建、自动驾驶车辆以及交通管理优化等方面。通过对当前技术的深度分析与未来趋势的展望,文章旨在提供一个全面的视角,理解AI如何塑造交通的未来。
|
8月前
|
算法 数据安全/隐私保护 计算机视觉
基于Retinex算法的图像去雾matlab仿真
本项目展示了基于Retinex算法的图像去雾技术。完整程序运行效果无水印,使用Matlab2022a开发。核心代码包含详细中文注释和操作步骤视频。Retinex理论由Edwin Land提出,旨在分离图像的光照和反射分量,增强图像对比度、颜色和细节,尤其在雾天条件下表现优异,有效解决图像去雾问题。
|
11月前
|
存储 安全 Java
每日大厂面试题大汇总 —— 今日的是“美团-后端开发-一面”
文章汇总了美团后端开发一面的面试题目,内容涉及哈希表、HashMap、二叉树遍历、数据库索引、死锁、事务隔离级别、Java对象相等性、多态、线程池拒绝策略、CAS、设计模式、Spring事务传播机制及RPC序列化工具等。
237 0
|
8月前
|
人工智能 JavaScript 前端开发
《鸿蒙Next ArkTS:开启人工智能应用开发高效新旅程》
在科技飞速发展的时代,人工智能与鸿蒙Next的结合成为开发者关注的焦点。ArkTS语言基于TypeScript,专为鸿蒙系统优化,支持静态类型检查和多种高级类型,能捕获潜在错误并充分利用鸿蒙底层能力。鸿蒙Next拥有微内核架构和分布式软总线技术,提供强大支持。开发环境搭建需安装Node.js、npm及DevEco Studio,并下载HarmonyOS SDK。通过引入HUAWEI HiAI等框架,开发者可实现多目标识别等功能。利用ArkTS的异步编程能力和声明式UI模型,可高效处理数据和用户交互。性能优化策略包括静态类型检查、WebAssembly加速及分布式任务分配。
241 11
|
8月前
|
关系型数据库 分布式数据库 数据库
|
10月前
|
存储 Unix Linux
哪些工具可以烧录树莓派的操作系统镜像
除了常见的烧录工具,树莓派操作系统镜像还可以通过以下工具烧录: 1. **Etcher**:树莓派官方推荐的图形界面工具,支持多操作系统,使用简单,具备严格的设备验证和校验机制。 2. **dd 命令**:适用于 Linux 和类 Unix 系统,功能强大但需谨慎使用,适合熟悉命令行的用户。 3. **BalenaEtcher**:与 Etcher 类似,跨平台且操作简单,确保烧录过程的准确性和安全性。 初学者建议使用 Etcher 或 BalenaEtcher,熟悉命令行的用户可以选择 dd 命令。
|
11月前
|
SQL 分布式计算 Hadoop
Apache Hive 帮助文档
Apache Hive 帮助文档
441 9
|
10月前
|
人工智能 自然语言处理 安全
2024年中国CRM市场领导者:年度排行榜揭晓
在竞争激烈的商业环境中,CRM 系统对企业至关重要。本文介绍了十款知名 CRM 系统,包括销售易、金蝶云之家、神州云动、八骏科技、天衣云、红圈、简道云、悟空、八百客和销帮帮。这些系统各具特色,涵盖从大中型企业到中小企业的不同需求,帮助企业更好地管理客户信息、提高销售效率、优化客户服务。企业在选择时应根据自身规模、行业特点和预算等因素综合考虑,选择最适合自己的 CRM 系统。
|
11月前
|
存储 监控 安全
贴片卡的应用场景
贴片卡,通常指的是尺寸小巧、可以直接贴在或嵌入到产品、设备或表面的卡片或芯片,它们集成了电路、存储器、微处理器等电子元件。这些卡片广泛应用于多个行业和领域,以实现数据的存储、传输、认证或控制等功能。以下是贴片卡的一些主要应用场景:
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的蛋糕订购小程序的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的蛋糕订购小程序的详细设计和实现(源码+lw+部署文档+讲解等)
187 3

热门文章

最新文章