如何在 Laravel 8 中的 Request class 中访问模型实例?
How to access model instance in a Request class in Laravel 8?
在我的 Laravel 项目中,我想通过这样的 Request
授权用户:
<?php
namespace Domain\Contents\Http\Requests\Blog;
use Domain\Contents\Models\Blog\Post;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Gate;
class ReadPostRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
if (request('id') === null) {
abort(403);
}
$post = Post::whereId(request('id'))->first();
return Gate::allows('view-post', $this->user(), $post);
}
// ...
}
但我觉得我的这部分代码有点乱:
if (request('id') === null) {
abort(403);
}
$post = Post::whereId(request('id'))->first();
在 Request
class 中访问当前 Post
模型是否有更简单的解决方案?
FormRequests 的文档建议 authorize()
方法 supports type hinting。
如果您正在使用路由模型绑定,那么您只需键入提示 post:
public function authorize(Post $post)
{
return Gate::allows('view-post', $this->user(), $post);
}
替代解决方案是您可以直接访问与模型绑定一起使用的模型。
return Gate::allows('view-post', $this->user(), $this->post);
为了便于使用,您可以在评论中输入提示。
/**
* @property \App\Models\Post $post
*/
在我的 Laravel 项目中,我想通过这样的 Request
授权用户:
<?php
namespace Domain\Contents\Http\Requests\Blog;
use Domain\Contents\Models\Blog\Post;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Gate;
class ReadPostRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
if (request('id') === null) {
abort(403);
}
$post = Post::whereId(request('id'))->first();
return Gate::allows('view-post', $this->user(), $post);
}
// ...
}
但我觉得我的这部分代码有点乱:
if (request('id') === null) {
abort(403);
}
$post = Post::whereId(request('id'))->first();
在 Request
class 中访问当前 Post
模型是否有更简单的解决方案?
FormRequests 的文档建议 authorize()
方法 supports type hinting。
如果您正在使用路由模型绑定,那么您只需键入提示 post:
public function authorize(Post $post)
{
return Gate::allows('view-post', $this->user(), $post);
}
替代解决方案是您可以直接访问与模型绑定一起使用的模型。
return Gate::allows('view-post', $this->user(), $this->post);
为了便于使用,您可以在评论中输入提示。
/**
* @property \App\Models\Post $post
*/