2
votes

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:

  • ProductsController@show to show details product
  • CategoriesController@show to show selected category with listing products which are assigned to it

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?

1
your question description are not enough to understand your problem, please elaborate it little more, So the community provide better solution.Qazi

1 Answers

1
votes

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']);