Переношу сайт с WP на Laravel (БД), основной задачей ставится сохранение всех путей для постов и категорий. Все категории и посты, не имеют какого-нибудь "якоря", типа: project.com/categories/{category-name} или project.com/posts/{post-name}.
В данном проекте все категории имеют вид: project.com/{category-name}, а посты: project.com/{post-name}.
Каким образом вообще пишется контроллер, чтобы по slug можно было выдергивать из БД категории и посты, притом чтобы это работало и при условии, что может существовать категория и пост с одинаковым slug?
Тут скорее всего дополнительными проверками в контроллере проще всего обойтись.
// Роут для всех
Route::get('/{slug}', 'ContentControler@content');
// Контроллер
public function content(string $slug)
{
$category = Category::whereSlug($slug)->first();
if ($category) {
// Возвратили категорию
}
// Сюда попали если категории нет
$post = Post::whereSlug($slug)->firstOrFail();
// Возвратили пост
}