I am trying to use method overloading feature in my laravel controller class. here is my methods
# 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
}
Here is my route -
// customer balance
Route::get('Customer/Balance', 'CustomerController@createBalance');
Route::get('Customer/Balance/{ID}', 'CustomerController@createBalance');
But it shows the error -
FatalErrorException in CustomerController.php line 45:
Cannot redeclare App\Http\Controllers\CustomerController::createBalance()
Any solution please ?
Consider use default parameters:
public function createBalance($CustomerID=null)
{
if ($CustomerID==null)
return view('customer.balance');
else
// show balance of the the defined customer
}
And change your route to:
Route::get('Customer/Balance/{CustomerID?}', 'CustomerController@createBalance');
Adding a "?" after the argument, Laravel understands you're passing an optional parameter.
You need to have different method names. This doesn't follow basic routing conventions either. The first createBalance method should probably be the index method.
I think createBalance()
method alredy exist in your CustomerController
so you should create new method or different name method and also change in route file with new method name.