Laravel中如何实现P52的显式路由与模型绑定?

更新于
2026-10-01 16:37:37
36阅读来源:SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1398个文字,预计阅读时间需要6分钟。

Laravel中如何实现P52的显式路由与模型绑定?

当使用Laravel的隐藏式绑定时,以下是一些常见问题及简洁回答:

1. 何时需要使用隐藏式绑定? - 当需要在路由或控制器中绑定中间件时,但不想在URL中暴露中间件名。

2. Laravel隐藏式绑定的使用方法? - 在路由定义中,使用`middleware()`方法绑定中间件,例如:`Route::get('path', 'Controller@action')->middleware('middleware-name');`。

Laravel中如何实现P52的显式路由与模型绑定?

3. 如何避免过于复杂的回答? - 保持回答简洁,直接点明关键点,如:在路由中使用`middleware()`方法绑定中间件。

4. 为何需要隐藏式绑定? - 为了隐藏中间件名,防止直接在URL中暴露敏感信息。

5. 隐藏式绑定与普通绑定的区别? - 普通绑定在URL中暴露中间件名,而隐藏式绑定不暴露,提供更安全的使用体验。

通过这种方式,我们可以为Laravel的隐藏式绑定提供更简洁明了的指导。

什么时候需要显式绑定模型与使用 Laravel 的隐式绑定?我经常发现的一个常见问题没有适当或足够简单的回答。因此,我认为它没有像应有的那样频繁使用。

在前面的示例中,我们使用了以下隐式路由模型绑定技术。

use App\Models\User;

Route::get('/implicit-binding/{user}', function (User $user) {
return $user;
});

如果我们只想返回已验证的用户怎么办?我通常看到的是以下代码:

use App\Models\User;

Route::get('/implicit-binding/{user}', function (User $user) {
if ($user->email_verified_at != null) {
return $user;
}

abort(404);
});

如果我们可以跳过所有这些并使我们的代码看起来更整洁,那不是很好吗?我们可以通过显式路由模型绑定。

显式路由模型绑定

如果我们知道我们将只返回经过验证的用户,我们可以将模型绑定到特定的 URL 参数。例如,

use App\Models\User;

Route::get('/explicit-binding/{verifiedUser}', function (User $user) {
return $user;
});

在上面的代码中,每次我们​​verifiedUser​​在路由中指定时,我们都希望将​​User​​模型显式绑定到​​$user​​参数。我们可以将其更改为​​$verifiedUser​​保持一致,但这不是必需的。

怎么办?Laravel 如何知道只有在用户的电子邮件已通过验证后才应该返回用户?使用我们将创建的以下代码。

Route::bind('verifiedUser', function($value) {
return User::where('id', $value)
->where('email_verified_at', '!=', null)
->firstOrFail();
});

我们使用一种​​Route::bind​​方法并将其指定​​verifiedUser​​为第一个参数。通过 URL 参数 ( ) 传递的值(​​verifiedUser​​将是一个 ID)将作为参数传递​​$value​​。从那里,我们可以搜索 等于​​id​​和 的​​$value​​用户​​where(‘email_verified_at’, ‘!=’, null)​​。

我们把这段代码放在哪里?在我们的路由(​​web.php​​​)文件中?没有。这实际上进入了​​RouteServiceProvider​​​.这是一个方便的名字,因为它有​​Route​​。

在 中​​RouteServiceProvider​​,我们将把代码放在方法中​​boot​​。

<?php

namespace App\Providers;

use App\Models\User;
use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Support\Facades\Route;

class RouteServiceProvider extends ServiceProvider
{
/**
* The path to the "home" route for your application.
*
* Typically, users are redirected here after authentication.
*
* @var string
*/
public const HOME = '/home';

/**
* Define your route model bindings, pattern filters, and other route configuration.
*
* @return void
*/
public function boot()
{
$this->configureRateLimiting();

$this->routes(function () {
Route::middleware('api')
->prefix('api')
->group(base_path('routes/api.php'));

Route::middleware('web')
->group(base_path('routes/web.php'));
});

Route::bind('verifiedUser', function($value) {
return User::where('id', $value)
->where('email_verified_at', '!=', null)
->firstOrFail();
});
}

// ...
}

就是这样。刷新你的路由。如果有任何资源包含未经验证的电子邮件地址,您将收到 404 错误,否则您将收到用户详细信息。

本文共计1398个文字,预计阅读时间需要6分钟。

Laravel中如何实现P52的显式路由与模型绑定?

当使用Laravel的隐藏式绑定时,以下是一些常见问题及简洁回答:

1. 何时需要使用隐藏式绑定? - 当需要在路由或控制器中绑定中间件时,但不想在URL中暴露中间件名。

2. Laravel隐藏式绑定的使用方法? - 在路由定义中,使用`middleware()`方法绑定中间件,例如:`Route::get('path', 'Controller@action')->middleware('middleware-name');`。

Laravel中如何实现P52的显式路由与模型绑定?

3. 如何避免过于复杂的回答? - 保持回答简洁,直接点明关键点,如:在路由中使用`middleware()`方法绑定中间件。

4. 为何需要隐藏式绑定? - 为了隐藏中间件名,防止直接在URL中暴露敏感信息。

5. 隐藏式绑定与普通绑定的区别? - 普通绑定在URL中暴露中间件名,而隐藏式绑定不暴露,提供更安全的使用体验。

通过这种方式,我们可以为Laravel的隐藏式绑定提供更简洁明了的指导。

什么时候需要显式绑定模型与使用 Laravel 的隐式绑定?我经常发现的一个常见问题没有适当或足够简单的回答。因此,我认为它没有像应有的那样频繁使用。

在前面的示例中,我们使用了以下隐式路由模型绑定技术。

use App\Models\User;

Route::get('/implicit-binding/{user}', function (User $user) {
return $user;
});

如果我们只想返回已验证的用户怎么办?我通常看到的是以下代码:

use App\Models\User;

Route::get('/implicit-binding/{user}', function (User $user) {
if ($user->email_verified_at != null) {
return $user;
}

abort(404);
});

如果我们可以跳过所有这些并使我们的代码看起来更整洁,那不是很好吗?我们可以通过显式路由模型绑定。

显式路由模型绑定

如果我们知道我们将只返回经过验证的用户,我们可以将模型绑定到特定的 URL 参数。例如,

use App\Models\User;

Route::get('/explicit-binding/{verifiedUser}', function (User $user) {
return $user;
});

在上面的代码中,每次我们​​verifiedUser​​在路由中指定时,我们都希望将​​User​​模型显式绑定到​​$user​​参数。我们可以将其更改为​​$verifiedUser​​保持一致,但这不是必需的。

怎么办?Laravel 如何知道只有在用户的电子邮件已通过验证后才应该返回用户?使用我们将创建的以下代码。

Route::bind('verifiedUser', function($value) {
return User::where('id', $value)
->where('email_verified_at', '!=', null)
->firstOrFail();
});

我们使用一种​​Route::bind​​方法并将其指定​​verifiedUser​​为第一个参数。通过 URL 参数 ( ) 传递的值(​​verifiedUser​​将是一个 ID)将作为参数传递​​$value​​。从那里,我们可以搜索 等于​​id​​和 的​​$value​​用户​​where(‘email_verified_at’, ‘!=’, null)​​。

我们把这段代码放在哪里?在我们的路由(​​web.php​​​)文件中?没有。这实际上进入了​​RouteServiceProvider​​​.这是一个方便的名字,因为它有​​Route​​。

在 中​​RouteServiceProvider​​,我们将把代码放在方法中​​boot​​。

<?php

namespace App\Providers;

use App\Models\User;
use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Support\Facades\Route;

class RouteServiceProvider extends ServiceProvider
{
/**
* The path to the "home" route for your application.
*
* Typically, users are redirected here after authentication.
*
* @var string
*/
public const HOME = '/home';

/**
* Define your route model bindings, pattern filters, and other route configuration.
*
* @return void
*/
public function boot()
{
$this->configureRateLimiting();

$this->routes(function () {
Route::middleware('api')
->prefix('api')
->group(base_path('routes/api.php'));

Route::middleware('web')
->group(base_path('routes/web.php'));
});

Route::bind('verifiedUser', function($value) {
return User::where('id', $value)
->where('email_verified_at', '!=', null)
->firstOrFail();
});
}

// ...
}

就是这样。刷新你的路由。如果有任何资源包含未经验证的电子邮件地址,您将收到 404 错误,否则您将收到用户详细信息。