简体   繁体   中英

Undefined variable $request after moving to VPS

I have a Laravel 9 application successfully running in a shared hosting service. I recently tried migrating the site to a VPS because I needed more resources but I get the following error in one of the views:

Undefined variable $request (View: /var/www/html/resources/views/auth/reset-password.blade.php)

I am using the Laravel resetting passwords system and it works fine in the shared hosting but in the VPS every time I try to reset the password I get the error mentioned above

In the web.php file I have the same routes as defined in the laravel resetting passwords site:

Route::get('/reset-password/{token}', function ($token) {
    return view('auth.reset-password', ['token' => $token]);
})->middleware('guest')->name('password.reset');

Route::post('/reset-password', function (Request $request) {
    $request->validate([
        'token' => 'required',
        'email' => 'required|email',
        'password' => 'required|min:8|confirmed',
    ]);
 
    $status = Password::reset(
        $request->only('email', 'password', 'password_confirmation', 'token'),
        function ($user, $password) {
            $user->forceFill([
                'password' => Hash::make($password)
            ])->setRememberToken(Str::random(60));
 
            $user->save();
 
            event(new PasswordReset($user));
        }
    );
 
    return $status === Password::PASSWORD_RESET
                ? redirect()->route('login')->with('status', __($status))
                : back()->withErrors(['email' => [__($status)]]);
})->middleware('guest')->name('password.update');

And in the view, I have modified the style but I am using the same content as the default reset-password Laravel view, the line that doesn't work properly in the VPS is:

<input type="hidden" name="token" value="{{ $request->route('token') }}">

I am sure I am using exactly the same code (Except the .env file, it was modified with the new database credentials) in the shared hosting and the VPS because I have it in a git repository.

I have already executed the following commands:

npm run prod

php artisan config:clear
php artisan route:clear
php artisan view:clear

Why is the $request variable not found in the VPS but it works properly in the shared hosting?

This is honestly not a good approach, you should research more on how controllers & models work, doing all of your coding inside of the route is not recommended - honestly it isn't your fault, as you can find the example in the documentation, which should be improved.

I recommend you take a look at https://laravel.com/docs/9.x/starter-kits#laravel-breeze it does already all of the authentication for you, and you can opt to choose which works best for you, test it out on your localhost first to get familiar with it. I recommend to use Breeze with Blade as a beginner: https://laravel.com/docs/9.x/starter-kits#breeze-and-blade

Meanwhile to fix your issue:

Change:

<input type="hidden" name="token" value="{{ $request->route('token') }}">

To:

<input type="hidden" name="token" value="{{ $token }}">

Reason:

When you pass the token or any variable to the view like this:

return view('auth.reset-password', ['token' => $token]);

you can use it directly in the blade without calling request with {{ $token }}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM