Создать только один маршрут domain/{username}
-> UserController
В вашей функции UserController->__invoke()
проверьте, является ли пользователь участником или администратором с вашей логикой.Вы можете написать класс для этого, если хотите, если вы не хотите помещать эту логику непосредственно в контроллер.
Затем, когда вы знаете, с каким пользователем вы имеете дело, передайте данныеMemberHandler
или AdminHandler
класс.Это может вернуть некоторые значения контроллеру, который вы передаете представлению, или вы можете сделать перенаправление в зависимости от возвращаемого значения.
Чтобы сделать его динамически , вы можете сделать что-то вроде этого: (но, конечно, вы могли бы также создать конструкции if-else для выбора правильного обработчика и представления, что помогло бы вашей IDE узнать, какие классы вы фактически используете).
public function __invoke(Request $request, $username){
// return 'Member' or 'Admin'
$userType = $this->getUserType($username);
// break out of function if userType is invalid
if(!$userType){
return 'cannot match usertype';
}
// compile the fully qualified class name for your handler
// this should produce \App\MyClasses\MemberHandler or \App\MyClasses\AdminHandler respectively
$targetHandlerClass = '\\App\\MyClasses\\' . $userType . 'Handler';
// instantiate your dynamically picked user handler
$handler = new $targetHandlerClass($username);
$data = $handler->doSomething();
// calls the view named 'Member.blade.php' or 'Admin.blade.php'
return view($userType, compact($data));
}