Laravel - 路由:初学者指南
你好,有抱负的Laravel开发者们!今天,我们将踏上一段激动人心的旅程,探索Laravel路由的世界。作为你友好的邻居计算机老师,我将引导你了解这个基本概念,确保你理解每一步。那么,拿一杯咖啡(或者如果你喜欢,一杯茶),让我们一起深入探讨!
什么是路由?
在我们开始之前,让我们先了解一下路由实际上是什么。想象你在一个大图书馆(互联网)里,你想找到一本特定的书(一个网页)。图书管理员(路由器)帮助你找到你正在寻找的确切书籍。在网页开发中,路由就像这个图书管理员,将网络请求引导到应用程序的正确部分。
基本路由
让我们从基础开始。在Laravel中,路由是在routes/web.php
文件中处理的。这是我们告诉我们的应用程序如何响应不同的URL请求的地方。
简单路由
下面是最简单的路由形式:
Route::get('/', function () {
return '你好,世界!';
});
让我们分解一下:
-
Route::get()
告诉Laravel响应一个GET请求。 - 第一个参数
'/'
是URL路径(在这个例子中,是主页)。 - 第二个参数是一个函数,它返回应该发送回浏览器的信息。
当你访问你的网站主页时,你会看到显示"你好,世界!"。
路由到视图
通常,我们不仅仅是返回文本,而是想返回一个完整的HTML页面。Laravel让这件事变得很容易:
Route::get('/welcome', function () {
return view('welcome');
});
这个路由会在有人访问/welcome
时返回welcome
视图。视图是存储在resources/views
目录中的HTML模板。
带有控制器的路由
随着应用程序的增长,你将希望使用控制器来更好地组织代码:
Route::get('/users', 'UserController@index');
这个路由告诉Laravel,当有人访问/users
时,调用UserController
的index
方法。
路由参数
现在,让我们更有趣一些。如果我们想在URL中处理动态片段会怎么样?
基本参数
Route::get('/user/{id}', function ($id) {
return '用户 '.$id;
});
这个路由会匹配像/user/1
、/user/2
等的URL。URL中的{id}
变成了传递给函数的变量。
可选参数
有时,一个参数可能是可选的。我们也可以处理这种情况:
Route::get('/user/{name?}', function ($name = 'John') {
return '你好,'.$name;
});
这个路由对于/user
和/user/Jane
都可以工作。如果没有提供名字,它默认为'John'。
参数约束
我们还可以使用正则表达式为参数添加约束:
Route::get('/user/{id}', function ($id) {
return '用户 '.$id;
})->where('id', '[0-9]+');
这个路由只有在id
由一个或多个数字组成时才会匹配。
命名路由
命名路由允许你通过名称而不是URL来引用路由。这在需要生成URL或重定向时特别有用。
定义命名路由
Route::get('/user/profile', function () {
//
})->name('profile');
使用命名路由
一旦路由被命名,你可以像这样生成URL或重定向:
// 生成一个URL...
$url = route('profile');
// 生成一个重定向...
return redirect()->route('profile');
这非常有帮助,因为如果你需要更改个人资料页面的URL,你只需要在一个地方(路由定义)更改它,所有对命名路由的引用将自动使用新的URL。
路由分组
随着应用程序的增长,你可能会发现自己在为一系列路由应用相同的中间件或前缀。Laravel允许你将这些路由分组:
Route::middleware(['auth'])->group(function () {
Route::get('/dashboard', function () {
// 需要认证...
});
Route::get('/account', function () {
// 需要认证...
});
});
这将为/dashboard
和/account
路由应用auth
中间件。
路由方法
Laravel支持所有标准的HTTP动词。以下是一个快速参考表:
HTTP动词 | 路由方法 |
---|---|
GET | Route::get() |
POST | Route::post() |
PUT | Route::put() |
PATCH | Route::patch() |
DELETE | Route::delete() |
OPTIONS | Route::options() |
你可以甚至用一个路由响应多个HTTP动词:
Route::match(['get', 'post'], '/', function () {
//
});
Route::any('/', function () {
//
});
就这样!你已经迈出了进入Laravel路由世界的第一步。记住,熟能生巧,所以不要害怕尝试不同的路由并看看会发生什么。
在我结束之前,这里有一个关于路由的笑话给你:为什么开发者破产了?因为他用光了他的缓存!?
快乐编码,愿你的路由总能引导你到达你想去的地方!
Credits: Image by storyset