如何在 Laravel 控制器中使用方法重载?

Meh*_*man 2 php oop overloading laravel

我正在尝试在我的 Laravel 控制器类中使用方法重载功能。这是我的方法

  # Load Customer Balance View
  public function createBalance()
  {
    return view('customer.balance');
  }

  # Load Customer Balance View
  public function createBalance($CustomerID)
  {
    // show balance of the the defined customer
  }
Run Code Online (Sandbox Code Playgroud)

这是我的路线 -

    // customer balance
    Route::get('Customer/Balance', 'CustomerController@createBalance');

    Route::get('Customer/Balance/{ID}', 'CustomerController@createBalance');
Run Code Online (Sandbox Code Playgroud)

但它显示了错误 -

FatalErrorException in CustomerController.php line 45:
Cannot redeclare App\Http\Controllers\CustomerController::createBalance()
Run Code Online (Sandbox Code Playgroud)

请问有什么解决办法吗?

Lui*_*ves 5

考虑使用默认参数:

  public function createBalance($CustomerID=null)
  {
    if ($CustomerID==null)
      return view('customer.balance');
    else
      // show balance of the the defined customer
  }
Run Code Online (Sandbox Code Playgroud)

并将您的路线更改为:

Route::get('Customer/Balance/{CustomerID?}', 'CustomerController@createBalance');
Run Code Online (Sandbox Code Playgroud)

加个“?” 在参数之后,Laravel 知道您正在传递一个可选参数。