"ReflectionException Function () does not exist" 尝试在 Laravel 中设置身份验证时
"ReflectionException Function () does not exist" when trying to setup authentication in Laravel
我在 Laravel 中让身份验证 100% 工作时遇到了一些麻烦(目前所有视图似乎都有效,除了“主页”),我希望从 Laravel 那里得到一些帮助那里的专家。
一些背景信息:
- PHP版本:7.3.11
- Laravel版本:8.13.0
- 使用 Composer 构建 uild ui 脚手架 (
composer require laravel/ui
)
- 使用了 Bootstrap ui 选项 (
php artisan ui bootstrap --auth
)
问题
如上所述,到目前为止,我似乎能够访问所有生成的身份验证视图(登录、注册和密码重置视图),但是在使用虚拟帐户注册后,我在尝试时遇到以下错误访问“主页”视图:
ReflectionException
Function () does not exist
堆栈跟踪指向以下文件:
"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();
}
}
以下行(第 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');
经过一番谷歌搜索后,我了解到我尝试用于设置身份验证的方法已被弃用,现在建议使用 Jetstream 或 Fortify,但是我也发现了一些人仍然设法在他们的项目中使用这种旧方法的例子:
https://www.youtube.com/watch?v=NuGBzmHlINQ
因为这是我的第一个 Laravel 项目,我真的只是想坚持基础知识,而不是让自己过于复杂,这就是为什么我选择不使用 Jetstream 或 Fortify 并尝试坚持这种设置身份验证的旧方法。但是,我已经坚持了几个小时,一直无法弄清楚出了什么问题,这就是为什么我现在正在寻求帮助的原因。
很高兴在需要时提供额外的 details/project 代码 - 非常感谢我能得到的任何帮助。
顺便说一句,这也是我第一次 post 在 Whosebug 上,所以任何对我的问题的反馈或关于如何改进它的建议也将不胜感激。
干杯,
亚行
通过删除第二个参数(因为它只需要 2 个参数),调整您的最后一条路线以包含某种类型的 'action':
Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');
我在制作简单路线时遇到了同样的错误。
Route::get("/test", [ListPagesController::class, "index"]);
这是我在 web.php 文件中的代码,我正在通过控制器在视图中路由我的 blade 文件。
当我后来在不使用控制器的情况下直接将它重定向到web.php时,问题就解决了。
Route::get("/test", function () {return view("main");});
不太明白为什么问题已经解决
你应该在第 2 行添加它 web.php
使用 App\Http\Controllers\YourControllerName;
对我来说,我改变了:
Route::get('/branch/', [Controller::class, 'get_branch_list'])->name('branch');
收件人:
Route::get('/branch/', 'Controller@get_branch_list')->name('branch');
我在 Laravel 中让身份验证 100% 工作时遇到了一些麻烦(目前所有视图似乎都有效,除了“主页”),我希望从 Laravel 那里得到一些帮助那里的专家。
一些背景信息:
- PHP版本:7.3.11
- Laravel版本:8.13.0
- 使用 Composer 构建 uild ui 脚手架 (
composer require laravel/ui
) - 使用了 Bootstrap ui 选项 (
php artisan ui bootstrap --auth
)
问题
如上所述,到目前为止,我似乎能够访问所有生成的身份验证视图(登录、注册和密码重置视图),但是在使用虚拟帐户注册后,我在尝试时遇到以下错误访问“主页”视图:
ReflectionException
Function () does not exist
堆栈跟踪指向以下文件: "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();
}
}
以下行(第 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');
经过一番谷歌搜索后,我了解到我尝试用于设置身份验证的方法已被弃用,现在建议使用 Jetstream 或 Fortify,但是我也发现了一些人仍然设法在他们的项目中使用这种旧方法的例子:
https://www.youtube.com/watch?v=NuGBzmHlINQ
因为这是我的第一个 Laravel 项目,我真的只是想坚持基础知识,而不是让自己过于复杂,这就是为什么我选择不使用 Jetstream 或 Fortify 并尝试坚持这种设置身份验证的旧方法。但是,我已经坚持了几个小时,一直无法弄清楚出了什么问题,这就是为什么我现在正在寻求帮助的原因。
很高兴在需要时提供额外的 details/project 代码 - 非常感谢我能得到的任何帮助。
顺便说一句,这也是我第一次 post 在 Whosebug 上,所以任何对我的问题的反馈或关于如何改进它的建议也将不胜感激。
干杯,
亚行
通过删除第二个参数(因为它只需要 2 个参数),调整您的最后一条路线以包含某种类型的 'action':
Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');
我在制作简单路线时遇到了同样的错误。
Route::get("/test", [ListPagesController::class, "index"]);
这是我在 web.php 文件中的代码,我正在通过控制器在视图中路由我的 blade 文件。 当我后来在不使用控制器的情况下直接将它重定向到web.php时,问题就解决了。
Route::get("/test", function () {return view("main");});
不太明白为什么问题已经解决
你应该在第 2 行添加它 web.php 使用 App\Http\Controllers\YourControllerName;
对我来说,我改变了:
Route::get('/branch/', [Controller::class, 'get_branch_list'])->name('branch');
收件人:
Route::get('/branch/', 'Controller@get_branch_list')->name('branch');