Настройка маршрутов вложенных ресурсов в Laravel

Я устанавливаю вложенные маршруты ресурсов в моем приложении. В настоящее время у меня есть

// 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), Есть ли способ, которым я могу загрузить правильного пользователя в __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);
}

// ...
}

Но это вызывает исключение.

0

Решение

Я не думаю, что это возможно, но вы можете переместить этот код в функцию:

private function getUsers($id) {
return Sentry::getUser()->clients()->find($userId);
}

и теперь в функциях вы можете использовать:

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

Другие решения

Других решений пока нет …