面向 JavaScript/NodeJS 开发者的 Laravel 6 和 VueJS 学习教程(第四部分)——Laravel 路由基础
Laravel 中的路由
上一部分我们深入探讨了路由及其工作原理。这一部分我们将更详细地讨论 Laravel 中的路由机制。
Laravel 自带路由,Vue.js 也都有自己的路由。本节我们将只讨论 Laravel 的路由。
基础知识
routes你会在 Laravel 项目的主文件夹中找到一个文件夹。
如果您使用的是 Laravel 6 或更高版本,则此文件夹中默认包含四个文件。这四个文件用途各不相同,您应该了解何时将路由添加到哪个特定文件中。
这些文件分别命名为 `.txt` api.php、 `.exe` channels.php、console.php`.exe` 和 `.exe` web.php。在本部分,我们只讨论 `.txt`api.php和 `.exe` 文件web.php。`.exe`channels.php和 `.exe`console.php文件属于更高级的主题,我们将在后面讨论。
顾名思义,`<web>` 标签web.php用于定义 Web 路由。Web 路由是指最终用户在浏览器中访问的路径。
如果您需要使用 API,则需要在 `<web>` 标签中定义路由api.php。我想到目前为止,这一点应该很清楚了。
我们来看一个hello world例子。
<?php
Route::get('/', function () {
return 'hello world!';
});
如果你编辑了你的web.php文件,保存后,访问http://127.0.0.1:8000你的 Laravel 应用所在的目录(例如 webpack)。
现在你应该只会看到一个空白页面,上面显示着“hello world”。
让我们来分析一下这段简短的内容。
Route::get这意味着它应该监听一个 HTTP GET 请求。第一个参数/是该 GET 请求的路径。在我们的示例中,它是根路由。第二个参数是一个闭包,它会在收到 HTTP 请求时运行。闭包是一个没有名称的函数,也称为匿名函数。浏览器将接收该函数返回的任何内容。很简单,对吧?
默认情况下,您将在文件中看到以下函数代码web.php。
Route::get('/', function () {
return view('welcome');
});
view这个闭包现在会返回一个以参数命名的函数welcome。这看起来有点晦涩难懂,但你很快就会明白。查看你的resources/view文件夹。在那里你会找到一个名为 `.php.js` 的文件welcome.blade.php。调用该view函数并传入参数welcome,会将这个文件以渲染后的形式返回给浏览器。这意味着所有 Blade 模板代码都将在服务器端运行,然后生成的 PHP 文件将被发送到浏览器。
路由参数
在某些情况下,您需要解析 URL。最常见的例子是 Id 参数。它可以是用户 ID、文章 ID 或您当前需要的任何 ID。在我们的示例中,我们将尝试获取 Id 为 . 的文章1。
Route::get('/post/{postId}', function ($postId = null) {
return $postId;
});
让我们来分析一下这段代码。函数的第一个参数Route::get仍然是 URL 路径,但现在我们看到它被花括号括起来了postId。花括号告诉 Laravel 这是一个参数。我们需要在闭包中引用这个参数。这就是为什么$postId第一个参数是 `<path>` 的原因。现在这个参数是必需的。仅仅提供一个/post/路径是行不通的。如果我们想让这个参数成为可选的,我们需要按如下方式修改代码。
Route::get('/post/{postId?}', function ($postId = null) {
return $postId;
});
这里唯一的改动是?参数名称末尾的 `--optional`。这?会告诉 Laravel 该参数postId是可选的,即使用户没有传递该参数,你仍然可以响应此路由。
请求类型
到目前为止,我们只处理过`Request` 类型get,但 Laravel 中还有更多请求类型。以下是所有请求类型的列表:
- 得到
- 邮政
- 放
- 删除
- 修补
- 选项
列出 Laravel 中的所有路由
Laravel 提供了一个简洁的命令来显示所有可用的路由。
你只需要输入以下命令即可。
PHP artisan route:list
这将在您的终端中显示一个包含所有路线的表格。
+--------+----------+---------------+------+---------+--------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+----------+---------------+------+---------+--------------+
| | GET|HEAD | / | | Closure | web |
| | GET|HEAD | api/user | | Closure | api,auth:api |
| | GET|HEAD | post/{postId} | | Closure | web |
+--------+----------+---------------+------+---------+--------------+