I have a ProfileController
and a CategoryController
.
I want to show the profiles of my users with the following route:
my.domain.com/firstname.lastname
my.domain.com/firstname2.lastname2
...
Just like Facebook is doing it. Therefore, I want to handle this within my ProfileController
so I ended up with a route like this:
Route::get('/{userSlug}', array('uses' => 'ProfileController@getProfile'));
That is no problem and it works fine. But now I want to show my categories like this:
my.domain.com/category-1
my.domain.com/category-2
...
The problem is, that I would do the route like this: Route::get('/{categorySlug}', array('uses' => 'CategoryController@getCategory'));
but this route is already used by the profile.
I know I can use just one controller and check there if the slug is a userSlug or a categorySlug
, but I really want to separate the profile logic from the category logic into their own controllers.
What is best practice here?
If your user routes will always be in the form of /firstname.lastname
, you could try Regular Expression Constraints:
Route::get('/{userSlug}', array('uses' => 'ProfileController@getProfile'))
->where('name', '[a-z]+\.[a-z]+');
Then, follow that up with your catch-all category route. However, you'd be far better off to prefix your category URLs (like /category/category-1
) instead.