Marcin Kozak
Marcin Kozak

Reputation: 49

Mapping route to another route in Laravel

I am developing an application in the Laravel 5.2 which must have a friendly URL-s. This is not problem with the regular way, where the {slug} wildcard is handled by a controller but I want to make it in a different way.

For now I have only two controllers:

And routes:

Route::get('product/{product}', 'ProductsCategory@show')->name('product.show');
Route::get('category/{category}', 'CategoriesController@show')->name('category.show');

So when I want to echo a just use route('product.show', compact('product'))

Nothing special until I want to handle different URL-s which are fetched from a database. I thought it will be possible to make an another routes which are assigned to existing and when I use a route(...) helper it will be handled automatically. But it is not. So for example I have a new URL:

domain.com/new-url-for-product.html

so by route it should be assigned to the regular 'product.show' route with some ID, which is handled by route model binder for {product} wildcard. The same for route(..) helper it should print friendly URL-s.

I don't know if my strategy is good. How do you handle with the similar problems?

Upvotes: 2

Views: 2136

Answers (1)

Qazi
Qazi

Reputation: 5135

of course route will handle this automatically. have a look into this. I am just giving you example, you have to set this code as per your need.

route('product.show', 'product'=>'new-url-for-product.html'); 

will generate this

domain.com/new-url-for-product.html

route('product.show', 'product'=>'new-url2-for-product.html');

will generate this URL

domain.com/new-url2-for-product.html

and so on, and then you have to handle all this in your controller method. eg: your controller method for this route is ProductsCategory@show which is

public function show($product){
 if($product == 'new-url-for-product.html'){
  //perform this
 }

 if($product == 'new-url2-for-product.html'){
  //perform this
 }
}

this just an example, you have to map this according to your need

Edited Here is the example I tested it

Route::get('/product/{product}.html', ['as'=>'product.show', 'uses'=>'ProductsCategory@show']);

Upvotes: 1

Related Questions