Rumah > Soal Jawab > teks badan
Saya telah cuba membuat laluan ubah hala yang membawa saya ke profil pengguna. Laluan ubah hala mestilah rentetan/teks daripada pangkalan data pengguna dan harus ubah hala ke halaman profil pengguna yang sama.
Sebagai contoh, katakan pengguna1 saya mempunyai lajur yang dipanggil "editable_link" dengan nilai "abcd123" dan boleh mengakses profil melalui laluan "www.mywebsite.com/user1", jadi apabila seseorang melawati "www.mywebsite.com / "abcd123", ia harus mengubah halanya ke "www.mywebsite.com/user1"
Saya mencuba pelbagai cara tetapi tiada yang berkesan untuk saya kerana saya baru dalam pengekodan. Bolehkah seseorang memberi saya penyelesaian terbaik?
Ini adalah apa yang ada dalam web saya.php:
<?php use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Auth; use App\Http\Controllers\UserController; use App\Http\Controllers\VisitController; use App\Http\Controllers\LinkController; use Illuminate\Auth\Events\Verified; Route::get('/', function () { return view('welcome'); }); Route::get('/verified', function () { return view('verified'); }); Auth::routes(['verify' => true]); Route::group(['middleware' => 'auth', 'prefix' => 'dashboard', ], function() { Route::get('/links', [LinkController::class, 'index']); Route::get('/links/new', [LinkController::class, 'create'])->middleware('verified'); Route::post('/links/new', [LinkController::class, 'store']); Route::get('/links/{link}', [LinkController::class, 'edit']); Route::post('/links/{link}', [LinkController::class, 'update']); Route::delete('/links/{link}', [LinkController::class, 'destroy']); Route::get('/qr', [LinkController::class, 'qr']); Route::get('/settings', [UserController::class, 'settings']); Route::get('/settings/edit', [UserController::class, 'edit']); Route::get('/settings/profile', [UserController::class, 'profile']); Route::get('/settings/help', [UserController::class, 'help']); Route::post('/settings/edit', [UserController::class, 'update']); Route::post('/settings/profile', [UserController::class, 'update_avatar']); }); Route::post('/visit/{link}', [VisitController::class, 'store']); Route::get('/{user}', [UserController::class, 'show'])->name('show');
Ini yang saya nak buat:
Route::get('/qr/{editable_link}', function () { return redirect('{user}'); Route::get('/{user}', [UserController::class, 'show'])->name('show'); });
Saya boleh menghantar sebarang kod lain yang anda perlukan, terima kasih.
P粉0418569552024-04-07 11:20:34
Anda mesti menyemak dahulu sama ada laluan yang mengandungi nilai pautan_editable wujud dalam pangkalan data. Kemudian anda tidak boleh melakukannya dalam definisi laluan kerana pangkalan data di sana belum siap.
Sudah tentu, anda boleh memilih untuk menyemak kewujudan melalui tempat pangkalan data tersedia (seperti pengawal atau perisian tengah).
Biar ada laluan ini sahaja
Route::get('/{user}', [UserController::class, 'show'])->name('show');
Kemudian dalam kaedah UserController
show
anda perlu mencipta syarat seperti contoh
public function show($user) { // checks if $user parameter is an editable_link that exist in db $userWithEditableLink = User::where('editable_link', $user)->first(); // redirect if above exist to the same route but with, for example, username if ($userWithEditableLink) { return redirect($userWithEditableLink->username); } // do something as, such as // $user = User::where('username', $user)->firstOrFail(); }
Sebagai alternatif, anda boleh mencipta perisian tengah yang turut mengandungi syarat di atas.