Laravel 8 - Cara mengubah hala /{editable_text} laluan ke /{user} route
P粉986028039
P粉986028039 2024-04-06 17:26:11
0
1
548

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粉986028039
P粉986028039

membalas semua(1)
P粉041856955

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan