基本路由

// 接收一个 URI 和一个闭包
Route::get('hello', function () {
return 'Hello, Laravel';
}); // 支持的路由方法
Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $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 ($postId, $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 ($id, $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 ($account, $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} 参数的路由:

$router->get('profile/{user}', function(App\User $user) {
//
});

如果请求 URL 是 profile/1, 就会注入一个用户 ID 为 1 的 User 实例, 如果匹配的模型实例在数据库不存在, 会自动生成并返回 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/

最为常用的Laravel操作(2)-路由的更多相关文章

  1. laravel强大功能路由初探(二)

    目标当然是先输出helloworld 配置hosts文件和apache下的httpd-vhosts.conf, hosts:127.0.0.1  www.blog.com httpd-vhosts.c ...

  2. Oracle手边常用命令及操作语句

    Oracle手边常用命令及操作语句 作者:白宁超 时间:2016年3月4日11:24:08 摘要:日常使用oracle数据库过程中,常用脚本命令莫不是用户和密码.表空间.多表联合.执行语句等常规操作. ...

  3. TP5常用命令符操作

    ThinkPHP5常用命令符操作   1. 模块自动生成指令:   默认会读取应用目录application下面的build.php作为自动   生成的定义文件,如果你的定义文件位置不同,则需要使用 ...

  4. 具体的client-server通信模型以及最为常用的通信模式

    实现虚拟网络服务的主要技术,指出IP负载均衡技术是在负载调度器的实现技术中效率最高的. 在已有的IP负载均衡技术中: 1)有通过网络地址转换(Network Address Translation)将 ...

  5. ASP.NET Core 中文文档 第四章 MVC(4.2)控制器操作的路由

    原文:Routing to Controller Actions 作者:Ryan Nowak.Rick Anderson 翻译:娄宇(Lyrics) 校对:何镇汐.姚阿勇(Dr.Yao) ASP.NE ...

  6. [转]Laravel 4之路由

    Laravel 4之路由 http://dingjiannan.com/2013/laravel-routing/ Laravel 4路由是一种支持RESTful的路由体系, 基于symfony2的R ...

  7. 原生JavaScript常用的DOM操作

    之前项目一直都是用JQuery或者Vue来做的,确实好用,毕竟帮我们解决了很多浏览器兼容问题,但是后面发现大公司面试题都是要原生Javascript来做,然后我就一脸懵逼哈哈哈,毕竟大公司需要的框架或 ...

  8. 常用的Tensor操作

    常用的Tensor操作 1.通过tensor.view方法可以调整tensor的形状,但必须保证调整去前后元素总数一致.view不会修改自身的数据,返回新的tensor与原tensor共享内存,即更改 ...

  9. Tutorial 01_熟悉常用的Linux操作和Hadoop操作

    (一)熟悉常用的Linux 操作cd 命令:切换目录 (1) 切换到目录“/usr/local” (2) 切换到当前目录的上一级目录 (3) 切换到当前登录Linux 系统的用户的自己的主文件夹  ...

  10. Git 常用命令及操作总结

    Git常用命令及操作总结 By:授客 QQ:1033553122 利用TortoiseGit克隆源码库到本地 1.安装TortoiseGit 2.打开Git,进入到源码库,点击图示红色选框框选按钮,弹 ...

随机推荐

  1. RDIFramework.NET开发框架用户字典助力Saas数据字典应用

    1.概述 在某些特殊应用(如:SaaS)中,系统内置的字典项有可能不能完全满足用户的需求,他们需要自己定义相应的数据项,我们框架完全支持这类应用,用户字典管理主界面如下图所示. 2.功能展示 需要说明 ...

  2. 帝国cms7.5和7.2 搜素模板支持 php和灵动标签以及不起作用

    帝国CMS搜索模板不支持动态标签调用,从7.0到7.2再到刚发布的7.5,帝国官方团队始终没解决这个问题,这很不方便,但是帝国的强大可以让我们忽略这个问题,今天老威就把这个bug的解决方法说一下. 第 ...

  3. 【Vue2.x源码系列07】监听器watch原理

    上一章 Vue2计算属性原理,我们介绍了计算属性是如何实现的?计算属性缓存原理?以及洋葱模型是如何应用的? 本章目标 监听器是如何实现的? 监听器选项 - immediate.deep 内部实现 初始 ...

  4. django使用多个数据库实现

    一.说明: 在开发 Django 项目的时候,很多时候都是使用一个数据库,即 settings 中只有 default 数据库,但是有一些项目确实也需要使用多个数据库,这样的项目,在数据库配置和使用的 ...

  5. js函数-参数默认值

    1. 在es6之前必须通过函数内部实现 就像以下的几种情况: function example(a,b){ var a = arguments[0] ? arguments[0] : 1;//设置参数 ...

  6. 【必知必会的MySQL知识】⑤DQL语言

    目录 一.前言 二.基础查询 2.1 语法 2.2 实践操作 三.条件查询 3.1 语法 3.2 where 语句操作符 3.3 实践操作 四.排序查询 4.1 语法格式 4.2 实践操作 五.分组查 ...

  7. PaddlePaddle 飞桨复现 ResNeXt

    import paddle.nn as nn import paddle class BN_Conv2D(nn.Layer): """ BN_CONV_RELU &quo ...

  8. 文心一言 VS chatgpt (6)-- 算法导论2.3 1~2题

    一.使用图 2-4作为模型,说明归并排序在数组 A=(3,41,52,26,38,57,9,49)上的操作. 文心一言: 使用图 2-4作为模型,说明归并排序在数组 A=(3,41,52,26,38, ...

  9. 2022-11-19:第二高的薪水。表结构和数据的sql语句如下,输出200,因为200是第二大的。请问sql语句如何写? DROP TABLE IF EXISTS `employee`; CREAT

    2022-11-19:第二高的薪水.表结构和数据的sql语句如下,输出200,因为200是第二大的.请问sql语句如何写? DROP TABLE IF EXISTS `employee`; CREAT ...

  10. 2022-07-18:以下go语言代码输出什么?A:Groutine;B:Main;C:Goroutine;D:GoroutineMain。 package main import ( “f

    2022-07-18:以下go语言代码输出什么?A:Groutine:B:Main:C:Goroutine:D:GoroutineMain. package main import ( "f ...