feat(search): /search?q= across videos, channels and playlists
Add a dedicated SearchController that matches the query against video title / description / tags / primary language AND any secondary audio track language (so "arabic" surfaces videos that carry an Arabic track even if the primary language is English), plus channel name / username / bio, plus playlist name / description. Public visibility only. Results reuse the videos/index view so every card gets the same component the browse feeds use. A new Channels section renders above the Videos grid when channel hits exist. /videos/search is kept as a 301 redirect to /search so bookmarks and external links stay valid; both the desktop header and mobile overlay search forms now point at the canonical route, both carry a visually hidden <label>, both get role="search" and both preserve the current query in their input. Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
This commit is contained in:
1 parent
6b2a67c4cd
commit
45b5f586ba
5 files changed
+166
-11
No files matched your search
+7
-1
@@ -25,7 +25,13 @@ Route::get('/', [VideoController::class, 'index'])->name('home');
|
||||
// Video routes - public
|
||||
Route::get('/videos', [VideoController::class, 'index'])->name('videos.index');
|
||||
Route::get('/videos/feed/more', [VideoController::class, 'feedMore'])->name('videos.feed.more');
|
||||
Route::get('/videos/search', [VideoController::class, 'search'])->name('videos.search');
|
||||
|
||||
// Site-wide search. /videos/search is the historical URL; keep it as a
|
||||
// signed-forward redirect so bookmarks and external links don't break.
|
||||
Route::get('/search', [\App\Http\Controllers\SearchController::class, 'index'])->name('search');
|
||||
Route::get('/videos/search', function (\Illuminate\Http\Request $request) {
|
||||
return redirect()->route('search', $request->only('q'), 301);
|
||||
})->name('videos.search');
|
||||
Route::get('/trending', [VideoController::class, 'trending'])->name('videos.trending');
|
||||
Route::get('/shorts', [VideoController::class, 'shorts'])->name('videos.shorts');
|
||||
Route::get('/videos/create', [VideoController::class, 'create'])->name('videos.create');
|
||||
|
||||
Reference in new issue
Block a user