Php 在Laravel中设置嵌套资源路由

Php 在Laravel中设置嵌套资源路由,php,rest,laravel,routing,controllers,Php,Rest,Laravel,Routing,Controllers,我正在应用程序中设置嵌套资源路由。目前,我有 // in app/routes Route::resource("users.folders", "FolderController"); // in app/controllers/api/v2 class FolderController extends \BaseController { public function index($userId) { return Response::json( Sent

我正在应用程序中设置嵌套资源路由。目前,我有

// in app/routes
Route::resource("users.folders", "FolderController");

// in app/controllers/api/v2
class FolderController extends \BaseController {

    public function index($userId)
    {
        return Response::json( Sentry::getUser()->clients()->find($userId)->folders()->with("resources")->get() );
    }

    public function show($userId, $id)
    {
        if( $f = Sentry::getUser()->clients()->find($userId)->folders()->with("resources")->find($id) )
        {
            return Response::json( $f );
        }

        return Response::json(["status" => "Not Found"], 404);
    }

    // ...
}
我总是以同样的方式加载用户,但总是编写
Sentry::getUser()->clients()->find($userId)
似乎是多余的。是否有某种方法可以在
\u construct
函数中加载正确的用户

我很想做像这样的事情

class FolderController extends \BaseController {

    public function __construct( $userId )
    {
        $this->user = Sentry::getUser()->clients()->find($userId);
    }

    public function index()
    {
        return Response::json( $this->user->folders()->with("resources")->get() );
    }

    public function show($id)
    {
        if( $f = $this->user->folders()->with("resources")->find($id) )
        {
            return Response::json( $f );
        }

        return Response::json(["status" => "Not Found"], 404);
    }

    // ...
}

但这会导致一个异常。

我认为这是不可能的,但您可以将此代码移动到函数:

private function getUsers($id) {
   return Sentry::getUser()->clients()->find($userId);
}
现在在函数中,您可以使用:

return Response::json( $this->getUsers($userId)->folders()->with("resources")->get() );