Php Laravel5请求:授权对象并将其解析到控制器

Php Laravel5请求:授权对象并将其解析到控制器,php,laravel,laravel-5,Php,Laravel,Laravel 5,我不确定我是否正确使用了此功能,但我正在使用Laravel 5中的请求来检查用户是否已登录以及他是否是对象的所有者。要做到这一点,我需要在请求类中获取实际对象,但接下来我需要在控制器中获取相同的对象 因此,我想,与其获取它两次,为什么不将对象设置为请求类上的变量,使其可供控制器访问呢 它管用,但我觉得脏吗?有没有更合适的方法来处理这个问题 前。 请求类 class DeleteCommentRequest extends Request { var $comment = null;

我不确定我是否正确使用了此功能,但我正在使用Laravel 5中的请求来检查用户是否已登录以及他是否是对象的所有者。要做到这一点,我需要在请求类中获取实际对象,但接下来我需要在控制器中获取相同的对象

因此,我想,与其获取它两次,为什么不将对象设置为请求类上的变量,使其可供控制器访问呢

它管用,但我觉得脏吗?有没有更合适的方法来处理这个问题

前。 请求类

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()