Laravel - 请求
Laravel - 请求
Section titled “Laravel - 请求”Laravel 的 Illuminate\Http\Request 类提供了一种面向对象的方式来与应用程序当前处理的 HTTP 请求进行交互。这包括检索输入、cookie、文件以及关于请求本身的信息。
要通过依赖注入获取当前 HTTP 请求的实例,你应该在控制器方法或路由闭包上类型提示 Illuminate\Http\Request 类。传入的请求实例将由 Laravel 服务容器自动注入:
use Illuminate\Http\Request;
Route::get('/users', function (Request $request) { // Use $request instance});
// In a controller method:public function store(Request $request){ $name = $request->input('name'); // ...}检索请求路径、主机和方法
Section titled “检索请求路径、主机和方法”Illuminate\Http\Request 实例提供了多种方法来检查传入的 HTTP 请求。以下是一些常见方法:
path方法返回请求的路径信息。因此,如果传入请求的目标是http://example.com/foo/bar,path方法将返回foo/bar。is方法允许你验证传入请求的路径是否匹配给定的模式。使用此方法时,你可以使用*字符作为通配符。url方法返回传入请求的完整 URL。fullUrl方法返回包含查询字符串的完整 URL。method方法返回请求的 HTTP 动词(GET、POST、PUT、DELETE)。isMethod方法检查 HTTP 动词是否匹配给定的字符串。
示例:检查请求 URI
Section titled “示例:检查请求 URI”步骤 1:执行以下命令创建一个名为 RequestDemoController 的新控制器。
php artisan make:controller RequestDemoController步骤 2:成功执行后,控制台将显示类似“Controller created successfully.”的消息。
步骤 3:将以下代码添加到 app/Http/Controllers/RequestDemoController.php:
app/Http/Controllers/RequestDemoController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class RequestDemoController extends Controller{ public function inspect(Request $request) { echo 'Path: ' . $request->path() . '<br>'; echo 'Is foo/* pattern match? ' . ($request->is('foo/*') ? 'Yes' : 'No') . '<br>'; echo 'Is bar/* pattern match? ' . ($request->is('bar/*') ? 'Yes' : 'No') . '<br>'; echo 'Full URL: ' . $request->fullUrl() . '<br>'; echo 'HTTP Method: ' . $request->method() . '<br>'; }}步骤 4:在 routes/web.php 文件中添加以下路由定义。
routes/web.php
use App\Http\Controllers\RequestDemoController;
Route::get('/foo/bar/test', [RequestDemoController::class, 'inspect']);步骤 5:在浏览器中访问以下 URL:
http://localhost:8000/foo/bar/test?name=John
步骤 6:输出将显示有关请求 URI 的信息,类似于:
Path: foo/bar/test
Is foo/* pattern match? Yes
Is bar/* pattern match? No
Full URL: http://localhost:8000/foo/bar/test?name=John
HTTP Method: GET
你可以使用 all() 方法将所有传入请求的输入数据作为数组检索。然而,你通常只需要输入数据的子集。无论请求使用哪种 HTTP 动词,你都可以使用一些简单的方法访问用户输入。
使用 input() 方法:
Section titled “使用 input() 方法:”input() 方法从请求载荷(查询字符串或表单数据)中检索值。
$name = $request->input('name');// 如果输入不存在,你可以提供一个默认值$role = $request->input('role', 'guest');使用动态属性:
Section titled “使用动态属性:”你还可以使用 Illuminate\Http\Request 实例上的动态属性访问用户输入。
$name = $request->name;当处理包含数组输入的表单时,使用“点”表示法访问数组元素:
$name = $request->input('products.0.name');$names = $request->input('products.*.name');示例:用户注册表单输入
Section titled “示例:用户注册表单输入”步骤 1:在 resources/views/auth/register.blade.php 创建一个注册表单视图。
resources/views/auth/register.blade.php
<!DOCTYPE html><html><head> <title>User Registration</title></head><body> <h2>Register</h2> <form action="{{ url('/user/submit-registration') }}" method="POST"> @csrf <div> <label for="name">Name:</label> <input type="text" id="name" name="name" value="{{ old('name') }}"> </div> <div> <label for="username">Username:</label> <input type="text" id="username" name="username" value="{{ old('username') }}"> </div> <div> <label for="password">Password:</label> <input type="password" id="password" name="password"> </div> <button type="submit">Register</button> </form></body></html>注意 @csrf 用于 CSRF 保护,以及 old('field_name') 用于在验证错误时重新填充表单(尽管此特定控制器示例中未显示验证,但这是一种良好实践)。
步骤 2:执行以下命令创建一个 UserRegistrationController。
php artisan make:controller UserRegistrationController步骤 3:控制台输出将确认:“Controller created successfully.”。
步骤 4:将以下代码复制到 app/Http/Controllers/UserRegistrationController.php 中。
app/Http/Controllers/UserRegistrationController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UserRegistrationController extends Controller{ public function showRegistrationForm() { return view('auth.register'); }
public function register(Request $request) { // 使用 input() 方法检索 name 输入字段 $name = $request->input('name'); echo 'Name: ' . htmlspecialchars($name) . '<br>';
// 使用动态属性检索 username 输入字段 $username = $request->username; echo 'Username: ' . htmlspecialchars($username) . '<br>';
// 检索 password 输入字段 $password = $request->input('password'); echo 'Password: 在这里显示密码是不安全的。应该存储哈希版本。'; // 在实际应用程序中,你会对密码进行哈希处理: // $hashedPassword = Hash::make($password); }}步骤 5:在 routes/web.php 中添加以下路由。
routes/web.php
use App\Http\Controllers\UserRegistrationController;
Route::get('/register-user', [UserRegistrationController::class, 'showRegistrationForm']);Route::post('/user/submit-registration', [UserRegistrationController::class, 'register']);步骤 6:在浏览器中访问 http://localhost:8000/register-user。你将看到注册表单。
步骤 7:填写详细信息并单击“注册”。下一页将显示你提交的输入值,演示了如何在控制器中检索它们。例如:Name: John Doe, Username: johndoe, Password: Displaying password here is insecure. Hashed version would be stored.
有关处理请求的更多详细信息,包括文件上传、cookie 和其他高级功能,请查阅 Laravel 官方文档中的 HTTP 请求部分。