根据情况在 Laravel 中选择控制器

问题描述 投票:0回答:2

我需要创建一个用户认证控制器。用户可以分为两种类型:买家和卖家。我希望根据用户类型在同一地址 /accreditations/create 调用不同的控制器。 现在我做到了。

Route web.php
Route::middleware('auth')->group(function () {
    Route::resource('accreditations', AccreditationController::class);
});

在AccreditationController的Create方法中

public function create()
{
    $user = auth()->user();

    $controllerName = $this->getControllerName($user->role);
    $controller = app()->make($controllerName);
    return $controller->callAction('create', []);
}

protected function getControllerName($id){
     return match ($id) {
         Roles::TRADER=> TraderController::class,
         Roles::BUYER => BuyerController::class,
     };
 }

因此,在每个控制器中我创建了一个调用其自己的 View 的 Create 方法

class TraderController extends Controller
{
    public function create()
    {
        $user = auth()->user();
        return View('Accreditations/CreateTrader', compact('user'));
    }
}

我做的是正确的事情还是有更好的方法来解决这个问题?

laravel routes controller
2个回答
0
投票

所以您的情况是:您有 2 个角色(买方和卖方),并且您希望您的行动取决于角色?

也许只需要 1 个控制器和 if 条件。 所以你的控制器将是这样的:

public function create(){
  if(role=="buyer"){
    //code for buyer
  }
  else{
    //code for seller
  }
}

0
投票

改变@Herry的答案,你可以做

public function create(Request $request){
  if(role=="buyer"){
    return $this->createBuyer($request);
  } else if(role=="seller"){
    return $this->createSeller($request);
  } else{
    return $this->createDefault($request);
  }
}

public function createBuyer($request) {
  
}

public function createSeller($request) {
  
}

public function createDefault($request) {
  
}

您有单点入口方法

create
,然后根据角色返回方法。

© www.soinside.com 2019 - 2024. All rights reserved.