我是Laravel新手。我想在Laravel中进行路由。
domain/{member_name} -> to MemberController
domain/{admin_name} -> to AdminController
但是当我访问domain/example-admin-name
时,它只会转到MemberController
。
我知道我可以做domain/member/{member_name}
和domain/admin/{admin_name}
。
但是我希望它很简单并且只有一个段URI
答案 0 :(得分:0)
laravel路由将两个路由初始化为一个,因为它们之间没有发现任何区别,因此您可以采用两种方法 1.为您的路线使用前缀,例如:
domain/users/{member_name} -> to MemberController
domain/admin/{admin_name} -> to AdminController
2。使用一条路由并在控制器功能中以用户角色处理目的地,例如,如果登录用户具有角色1 show admin面板,如果角色2重定向到用户面板
我建议您使用第一个解决方案,因为您拥有更好的代码并对其进行了优化。
答案 1 :(得分:0)
仅创建一条路线domain/{username}
-> UserController
在您的UserController->__invoke()
函数中,根据您的逻辑检查用户是成员还是管理员。如果您愿意,可以将其编写为一个类,如果您不想将该逻辑直接放入控制器中。
然后,当您知道要处理的用户类型时,将数据传递到MemberHandler
或AdminHandler
类。这些可以将一些值返回给您传递给视图的控制器,或者您可以根据返回值进行重定向。
要使其动态,您可以执行以下操作:(但是当然,您还可以构建if-else构造,以选择正确的Handler和View,这将帮助您的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));
}