繁体   English   中英

移动到 VPS 后未定义的变量 $request

[英]Undefined variable $request after moving to VPS

我有一个 Laravel 9 应用程序在共享托管服务中成功运行。 我最近尝试将站点迁移到 VPS,因为我需要更多资源,但在其中一个视图中出现以下错误:

未定义的变量 $request(视图:/var/www/html/resources/views/auth/reset-password.blade.php)

我正在使用 Laravel重置密码系统,它在共享主机中工作正常,但在 VPS 中,每次我尝试重置密码时,我都会收到上述错误

web.php文件中,我具有与 laravel 重置密码站点中定义的相同的路由:

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');

在视图中,我修改了样式,但我使用的内容与默认的reset-password Laravel 视图相同,在VPS中无法正常工作的行是:

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

我确定我在共享主机和 VPS 中使用完全相同的代码(除了.env文件,它是用新的数据库凭据修改的)因为我在 git 存储库中有它。

我已经执行了以下命令:

npm run prod

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

为什么在VPS中找不到$request变量,但它在共享主机中正常工作?

老实说,这不是一个好方法,您应该更多地研究控制器和模型的工作原理,不建议在路由内进行所有编码 - 老实说,这不是您的错,您可以在文档中找到示例,应该改进。

我建议你看看https://laravel.com/docs/9.x/starter-kits#laravel-breeze它已经为你完成了所有的身份验证,你可以选择最适合你的,首先在您的本地主机上对其进行测试以熟悉它。 我建议初学者使用Breeze with Bladehttps://laravel.com/docs/9.x/starter-kits#breeze-and-blade

同时解决您的问题:

改变:

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

到:

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

原因:

当您像这样将令牌或任何变量传递给视图时:

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

您可以直接在刀片中使用它,而无需使用{{ $token }}调用请求

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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