![](/img/trans.png)
[英]ErrorException Undefined variable After moving to laravel helper functions
[英]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 Blade : https://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.