Hazem Taha
Hazem Taha

Reputation: 1184

Laravel 5.0 | Changing default actions' names is not working for a resource controller

I have created a productController resource in the route.php file like this:-

Route::resource('products','ProductController',['names' => ['create' => 'products.add']]);

Here is how my productController.php file looks like:-

<?php namespace lvtest\Http\Controllers;

use lvtest\Http\Requests;
use lvtest\Product;
use lvtest\Http\Controllers\Controller;

use Illuminate\Http\Request;

class ProductController extends Controller {


/**
* Class constructor .. requires authentication
*/

public function __construct()
{
$this->middleware('auth');
}
/**
* Display a listing of the resource.
*
* @return Response
*/
public function index()
{
$products = Product::all();
return view('products.productsList', ['products' => $products]);
}

/**
* Show the form for creating a new resource.
*
* @return Response
*/
public function add()
{
return 'Add a product';
}

/**
* Store a newly created resource in storage.
*
* @return Response
*/
public function store()
{
return 'store new product?';
}

/**
* Display the specified resource.
*
* @param  int  $id
* @return Response
*/
public function show($id = null)
{
// $products = Product::all();
// print_r($products);
}

/**
* Show the form for editing the specified resource.
*
* @param  int  $id
* @return Response
*/
public function edit($id)
{
//
}

/**
* Update the specified resource in storage.
*
* @param  int  $id
* @return Response
*/
public function update($id)
{
return 'store new product?';
}

/**
* Remove the specified resource from storage.
*
* @param  int  $id
* @return Response
*/
public function destroy($id)
{
//
}

}

and passed the 'names' array to change the default name of the create method to add. When I go to localhost:8000/products/add I get a blank page. How do I fix this

Upvotes: 0

Views: 879

Answers (1)

gpopoteur
gpopoteur

Reputation: 1519

Adding the ['names' => ['create' => 'products.add'] to your resource route will only change the Route Name, and not the Route Method. This means that you can refer to your route as route('products.add') and it will point to the create() method on your controller.

When you use Route::resource Laravel will expect that you have a create() method on your controller. To be able to do what you suggest, you might need to add the method to your controller, and then add a separate route:

Route::resource('products','ProductController');
Route::get('products/add', ['as' => 'products.add', 'uses' => 'ProductController@add']);

Upvotes: 2

Related Questions