尝试在 Laravel 中设置身份验证时出现“ReflectionException Function () 不存在”

adb*_*adb 9 authentication laravel laravel-8

我在 Laravel 中 100% 进行身份验证时遇到了一些麻烦(到目前为止,除了“home”之外的所有视图似乎都有效),并且希望从 Laravel 专家那里获得一些帮助。


一些背景信息:

  • PHP 版本:7.3.11
  • Laravel 版本:8.13.0
  • 使用Composer构建 ui 脚手架 ( composer require laravel/ui)
  • 使用Bootstrap ui 选项 ( php artisan ui bootstrap --auth)

问题

如上所述,我似乎能够访问迄今为止生成的所有身份验证视图(登录、注册和密码重置视图),但是在使用虚拟帐户注册后,在尝试访问“主页”时出现以下错误看法:

反射异常

函数()不存在

堆栈跟踪指向以下文件:“vendor/laravel/framework/src/Illuminate/Routing/RouteSignatureParameters.php:23”:

<?php

namespace Illuminate\Routing;

use Illuminate\Support\Reflector;
use Illuminate\Support\Str;
use ReflectionFunction;
use ReflectionMethod;

class RouteSignatureParameters
{
    /**
     * Extract the route action's signature parameters.
     *
     * @param  array  $action
     * @param  string|null  $subClass
     * @return array
     */
    public static function fromAction(array $action, $subClass = null)
    {
        $parameters = is_string($action['uses'])
                        ? static::fromClassMethodString($action['uses'])
                        : (new ReflectionFunction($action['uses']))->getParameters();

        return is_null($subClass) ? $parameters : array_filter($parameters, function ($p) use ($subClass) {
            return Reflector::isParameterSubclassOf($p, $subClass);
        });
    }

    /**
     * Get the parameters for the given class / method by string.
     *
     * @param  string  $uses
     * @return array
     */
    protected static function fromClassMethodString($uses)
    {
        [$class, $method] = Str::parseCallback($uses);

        if (! method_exists($class, $method) && Reflector::isCallable($class, $method)) {
            return [];
        }

        return (new ReflectionMethod($class, $method))->getParameters();
    }
}
Run Code Online (Sandbox Code Playgroud)

以下行(第 23 行)被突出显示为错误:

: (new ReflectionFunction($action['uses']))->getParameters();


以下是“web.php”文件中使用的路由:

<?php

use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    return view('welcome', ['pageTitle' => 'Home']);
});

Route::get('/services', function () {
    return view('services', ['pageTitle' => 'Services']);
});

Route::get('/contact', function () {
    return view('contact', ['pageTitle' => 'Contact']);
});

Auth::routes();

Route::get('/home', ['pageTitle' => 'Client Dashboard'], [App\Http\Controllers\HomeController::class, 'index'])->name('home');
Run Code Online (Sandbox Code Playgroud)

经过一番谷歌搜索后,我了解到我尝试用来设置身份验证的方法已被弃用,现在建议使用JetstreamFortify,但是我也发现了一些人们仍在设法使用这种旧方法的示例他们项目中的方法:

https://www.youtube.com/watch?v=NuGBzmHlINQ


由于这是我的第一个 Laravel 项目,我真的试图坚持基础知识,而不是让自己的事情变得过于复杂,这就是为什么我选择不使用JetstreamFortify并尝试坚持这种旧的设置身份验证的方法。然而,我已经被困在这个问题上几个小时了,无法弄清楚出了什么问题,这就是为什么我现在正在寻求一些帮助。

如果需要的话,很乐意提供额外的细节/项目代码 - 我能得到的任何帮助将非常感激。


顺便说一句,这也恰好是我在 StackOverflow 上发表的第一篇文章,因此任何有关我的问题的反馈或有关如何改进它的建议也将不胜感激。



干杯,

亚行

lag*_*box 14

通过删除第二个参数(因为它只需要 2 个参数)来调整最后一个路由以包含某种类型的“操作”:

Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');
Run Code Online (Sandbox Code Playgroud)