Laravel - 路由:初学者指南

你好,有抱负的Laravel开发者们!今天,我们将踏上一段激动人心的旅程,探索Laravel路由的世界。作为你友好的邻居计算机老师,我将引导你了解这个基本概念,确保你理解每一步。那么,拿一杯咖啡(或者如果你喜欢,一杯茶),让我们一起深入探讨!

Laravel - Routing

什么是路由?

在我们开始之前,让我们先了解一下路由实际上是什么。想象你在一个大图书馆(互联网)里,你想找到一本特定的书(一个网页)。图书管理员(路由器)帮助你找到你正在寻找的确切书籍。在网页开发中,路由就像这个图书管理员,将网络请求引导到应用程序的正确部分。

基本路由

让我们从基础开始。在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时,调用UserControllerindex方法。

路由参数

现在,让我们更有趣一些。如果我们想在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