Php Laravel5请求:授权对象并将其解析到控制器
我不确定我是否正确使用了此功能,但我正在使用Laravel 5中的请求来检查用户是否已登录以及他是否是对象的所有者。要做到这一点,我需要在请求类中获取实际对象,但接下来我需要在控制器中获取相同的对象 因此,我想,与其获取它两次,为什么不将对象设置为请求类上的变量,使其可供控制器访问呢 它管用,但我觉得脏吗?有没有更合适的方法来处理这个问题 前。 请求类Php Laravel5请求:授权对象并将其解析到控制器,php,laravel,laravel-5,Php,Laravel,Laravel 5,我不确定我是否正确使用了此功能,但我正在使用Laravel 5中的请求来检查用户是否已登录以及他是否是对象的所有者。要做到这一点,我需要在请求类中获取实际对象,但接下来我需要在控制器中获取相同的对象 因此,我想,与其获取它两次,为什么不将对象设置为请求类上的变量,使其可供控制器访问呢 它管用,但我觉得脏吗?有没有更合适的方法来处理这个问题 前。 请求类 class DeleteCommentRequest extends Request { var $comment = null;
class DeleteCommentRequest extends Request {
var $comment = null;
public function authorize() {
$this->comment = comment::find(Input::get('comment_id'));
$user = Auth::user();
if($this->comment->user == $user)
return true;
return false;
}
public function rules() {
return [
'comment_id' => 'required|exists:recipes_comments,id'
];
}
}
例如:控制器:
public function postDeleteComment(DeleteCommentRequest $request) {
$comment = $request->comment;
$comment->delete();
return $comment;
}
那么我的问题是什么?在使用新的Laravel 5请求时,我如何最好地处理必须使用对象两次的情况?我是否可能过度扩展了应用程序的功能?是否可以将对象存储在应用程序类中,以便稍后在控制器中访问它?我需要查询本身的所有权,然后检查集合是否为空
class DeleteCommentRequest extends Request {
var $comment = null;
public function authorize() {
$this->comment = comment::where('id',Input::get('comment_id'))->where('user_id',Auth::id())->first();
if($this->comment->is_empty())
return false;
return true;
}
public function rules() {
return [
'comment_id' => 'required|exists:recipes_comments,id'
];
}
}
因为你想在两个不同的地方使用这个模型,但是只查询一次,我会重新开始你的使用 在RouteServiceProvider类(或任何相关的提供程序)中,您需要从引导方法内部绑定注释查询。bind()的第一个参数将是与路由中的通配符匹配的值
public function boot()
{
app()->router->bind( 'comment_id', function ($comment_id) {
return comment::where('id',$comment_id)->where('user_id',Auth::id())->first();
} );
}
一旦设置好,您就可以像这样从DeleteCommentRequest访问模型
$this->comment_id
注意:变量是Comment_id,因为它与路线匹配,但它将包含实际模型
从你的控制器,你就这样注入它
public function postDeleteComment(Comment $comment, DeleteCommentRequest $request) {
$comment->delete();
return $comment;
}
好吧,我不知道最干净的方法是什么,但是你可以通过以下方法使它变得更短:例如,
returncomment::find(Request::input('Comment_id'))->user_id==Auth::id()不是说这是一个很好的方法,而是把它扔出去。