Laravel 8 - Comment rediriger la route /{editable_text} vers la route /{user}
P粉986028039
P粉986028039 2024-04-06 17:26:11
0
1
547

J'ai essayé de créer un itinéraire de redirection qui me mène à un profil utilisateur. L'itinéraire de redirection doit être une chaîne/texte provenant de la base de données utilisateur et doit rediriger vers la même page de profil utilisateur.

Par exemple, disons que mon utilisateur1 a une colonne appelée "editable_link" avec une valeur de "abcd123" et peut accéder au profil via l'itinéraire "www.mywebsite.com/user1", donc quand quelqu'un visite "www.mywebsite.com / "abcd123", cela devrait le rediriger vers "www.mywebsite.com/user1"

J'ai essayé de nombreuses façons mais rien n'a fonctionné pour moi car je suis nouveau dans le codage. Quelqu'un peut-il me donner la meilleure solution ?

Voici ce qu'il y a dans mon web.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');

Voici ce que je veux créer :

Route::get('/qr/{editable_link}', function () {
    return redirect('{user}');
Route::get('/{user}', [UserController::class, 'show'])->name('show');
});

Je peux publier tout autre code dont vous avez besoin, merci.

P粉986028039
P粉986028039

répondre à tous(1)
P粉041856955

Vous devez d'abord vérifier si une route contenant la valeur editable_link existe dans la base de données. Ensuite, vous ne pouvez pas le faire dans la définition de l'itinéraire car la base de données n'y est pas encore prête.

Bien sûr, vous pouvez choisir de vérifier l'existence via l'endroit où la base de données est disponible (comme un contrôleur ou un middleware).

Qu'il n'y ait que cette route

Route::get('/{user}', [UserController::class, 'show'])->name('show');

Ensuite, dans la méthode UserController show, vous devez créer la condition comme exemple

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();
}

Vous pouvez également créer un middleware qui contient également les conditions ci-dessus.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal