如何在Laravel Controller中使用方法重载?

时间:2017-05-04 14:55:13

标签: php laravel oop overloading

我正在尝试在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
  }

这是我的路线 -

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

    Route::get('Customer/Balance/{ID}', 'CustomerController@createBalance');

但它显示错误 -

FatalErrorException in CustomerController.php line 45:
Cannot redeclare App\Http\Controllers\CustomerController::createBalance()

有任何解决方案吗?

2 个答案:

答案 0 :(得分:3)

考虑使用默认参数:

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

并将您的路线更改为:

Route::get('Customer/Balance/{CustomerID?}', 'CustomerController@createBalance');

在参数后添加“?”,Laravel知道你传递了一个可选参数。

答案 1 :(得分:1)

您需要具有不同的方法名称。这也不遵循基本的路由约定。第一个createBalance方法应该是索引方法。