我拿到了一个旧的Laravel应用程序,它运行的是v5.1,并使用Shift通过Laravel v9升级了它。
整个应用程序都在登录之后~并且在提交登录表单(正确或失败)时,它返回:
Too few arguments to function App\Providers\AppServiceProvider::App\Providers\{closure}(), 1 passed in /var/www/html/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php on line 421 and exactly 3 expected
并且迹线以app / Providers / AppServiceProvider.php: 37
结束,线37是function ($sql, $bindings, $time)
....
error_reporting(0);
// public function boot(Guard $auth) {
view()->composer('*', function ($view) use ($auth) {
if ($auth->user()) {
// get the current user
$currentUser = $auth->user();
Log::info('Executed by '.$currentUser->email);
// pass the data to the view
$view->with('currentUser', $currentUser);
}
});
DB::listen(
function ($sql, $bindings, $time) {
$a = print_r($sql, 1);
$b = print_r($bindings, 1);
$logmessage = $a;
if (! empty($b)) {
$logmessage .= ' : '.$b;
}
Log::info($logmessage);
}
);
...
在轮班过程中,关于登录/授权过程,注意到以下情况:
Laravel 5.3将Auth/AuthController.php文件拆分为Auth/LoginController.php和Auth/RegisterController.php。由于您的文件似乎是自定义的,Shift没有删除它。您应该将您的Auth/AuthController.php文件与新添加的控制器进行比较,并相应地合并您的更改。
以及
如果您正在使用身份验证,您应该升级所有使用AuthController和PasswordController的路由,以使用新的身份验证控制器。Laravel建议使用Auth::routes(),它为新的身份验证控制器注册正确的路由。此方法还为/logout注册POST路由,而不是GET路由。
但突出显示的错误行似乎与数据库连接有关...
数据库连接的快速健全性检查:
try {
\DB::connection()->getPDO();
echo \DB::connection()->getDatabaseName();
} catch (\Exception $e) {
echo 'None';
}
如预期返回正确的数据库连接。
我不是一个拉拉威尔特定的开发,所以试图蒙混过关,毫无疑问,需要提供更多的调试信息在这里,所以只是让我知道还有什么会有帮助。
先谢了
2条答案
按热度按时间u0sqgete1#
在与Shift的帮助团队聊天后,我们推断这是由DB日志记录引起的。
我们移除了那个障碍,一切都解决了。
这个问题可能只是签名不匹配。但不管怎样,您可能不希望在生产中使用这种代码。)
yhxst69z2#
DB::listen
的签名已更改为单个参数,其中包含三个参数作为属性,因此如果您仍然希望记录SQL查询,则需要调整该调用以适应。(不过,我还是建议用https://github.com/barryvdh/laravel-debugbar或https://laravel.com/docs/10.x/telescope代替。)
https://laravel.com/docs/10.x/database