laravel - Laravel - 限制用户的帖子数量
问题描述
有什么方法可以限制我项目中的用户的帖子数量。例如,我希望我的用户每个人最多可以创建 10 个帖子。所以一个用户有10个帖子?是有什么hasMany
还是别的什么?请帮助找到解决方案。谢谢
解决方案
根据定义
中间件提供了一种方便的机制来过滤进入应用程序的 HTTP 请求。例如,Laravel 包含一个中间件,用于验证您的应用程序的用户是否经过身份验证。如果用户未通过身份验证,中间件会将用户重定向到登录屏幕。但是,如果用户通过了身份验证,中间件将允许请求进一步进入应用程序。
为了防止用户添加超过 10 个帖子,您需要创建一个中间件来保护您的posts/create
路由
要创建新的中间件,请使用 make:middleware Artisan 命令:
php artisan make:middleware CheckUserPostsNumber
app/Http/Middleware
此命令将在您的目录中放置一个新的 CheckUserPostsNumber 类。在这个中间件中,如果用户发布的数字 < 小于 10,我们将只允许访问该posts/create
路由。否则,您会将用户重定向回主 URI:
<?php
namespace App\Http\Middleware;
use Illuminate\Support\Facades\Auth;
use Closure;
class CheckUserPostsNumber
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (Auth::user()->posts->count() >= 10) {
return redirect('home');
}
return $next($request);
}
}
将中间件分配给路由
您想将中间件分配给特定的路由,您应该首先在 app/Http/Kernel.php 文件中为中间件分配一个键。默认情况下,该类的 $routeMiddleware 属性包含 Laravel 中包含的中间件的条目。要添加您自己的,请将其附加到此列表并为其分配您选择的键:
// Within App\Http\Kernel Class...
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
//...
'checkUserPostsNumber' => 'App\Http\Middleware\checkUserPostsNumber'
];
一旦在 HTTP 内核中定义了中间件,您就可以使用中间件方法将中间件分配给路由:
Route::get('posts/create', function () {
//
})->middleware('auth', 'checkUserPostsNumber');
推荐阅读
- java - 避免使用 TomEE 和 Jersey 序列化 LocalDateTime
- ios - iOS PassKit 部分更新和隐私
- kubernetes - 使用 SSL 的 Kubernetes 端点
- c# - 您必须添加对程序集的引用...没有 web.config 文件
- git - git-push combined with refspec from mirror repositories deletes other branches?
- javascript - How to style individual calendar items with v-bind: class
- excel - Using macro in a for loop
- c++ - Start In 文件夹在哪里使用?
- c# - 更改包含 RTF 文本的范围的字体大小和字体名称
- wiremock - WireMockServer 在运行时更改映射目录