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

Posted

技术标签:

【中文标题】尝试在 Laravel 中设置身份验证时出现“ReflectionException Function () 不存在”【英文标题】:"ReflectionException Function () does not exist" when trying to setup authentication in Laravel 【发布时间】:2021-02-20 09:00:23 【问题描述】:

我在 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)

问题

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

反射异常

函数()不存在

堆栈跟踪指向以下文件: “供应商/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();
    

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

: (new ReflectionFunction($action['uses']))-&gt;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');

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

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

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

如果需要,很乐意提供额外的详细信息/项目代码 - 非常感谢我能获得的任何帮助。

顺便说一句,这也是我在 *** 上的第一篇帖子,因此,如果我对我的问题提供任何反馈或关于如何改进它的建议,我将不胜感激。

干杯,

亚行

【问题讨论】:

欢迎来到SO ...您能提供您的路线吗? 感谢@lagbox,刚刚更新了问题以包含路线:) 你的最后一条路线不对,get 只需要 2 个参数...只需传递你所拥有的第一个和第三个参数 @lagbox,你是个传奇!不敢相信它是如此简单 - 非常感谢你的帮助伙伴 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

我在制作简单路线时遇到了同样的错误。

Route::get("/test", [ListPagesController::class, "index"]);

这是我在 web.php 文件中的代码,我通过控制器在视图中路由刀片文件。 当我后来不使用控制器直接将它重定向到 web.php 时,问题就解决了。

Route::get("/test", function () return view("main"););

我不太明白为什么,但问题解决了。

【讨论】:

【参考方案3】:

您应该在第 2 行 web.php 中添加它 使用 App\Http\Controllers\YourControllerName;

【讨论】:

【参考方案4】:

对我来说,我改变了:

Route::get('/branch/',  [Controller::class, 'get_branch_list'])->name('branch');

收件人:

Route::get('/branch/',  'Controller@get_branch_list')->name('branch');

【讨论】:

以上是关于尝试在 Laravel 中设置身份验证时出现“ReflectionException Function () 不存在”的主要内容,如果未能解决你的问题,请参考以下文章

尝试在 Excel VBA 中设置 RefersToRange 属性时出现问题

如何使用另一个 API 的用户群在 laravel 中设置身份验证?

尝试在 lambda 函数中设置按钮标签时出现分段错误

使用 Laravel Lumen + Passport 获取经过身份验证的用户时出现问题

使用 laravel Sanctum 和 api 令牌身份验证获取用户时出现 401(未经授权)[重复]

尝试测试注册路由的 laravel 身份验证时