Rumah  >  Soal Jawab  >  teks badan

Laravel 8 - Cara mengubah hala /{editable_text} laluan ke /{user} route

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粉986028039P粉986028039211 hari yang lalu508

membalas semua(1)saya akan balas

  • P粉041856955

    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.

    balas
    0
  • Batalbalas