使用php Laravel控制器和路由器的Function()不存在错误[关闭]

Posted

技术标签:

【中文标题】使用php Laravel控制器和路由器的Function()不存在错误[关闭]【英文标题】:Function() does not exist error using php Laravel controllers and router [closed] 【发布时间】:2022-01-19 12:15:44 【问题描述】:

我有一个路由器 web.php 和两个控制器。一个是带有我的索引/主页的 HomeController,另一个是带有随机生成的数据库的 InventoryController。 当我在 localhost 上运行它时,我目前收到一个错误,即存在“反射异常并且 Function() 不存在”。

我的路由器 web.php:

<?php

use Illuminate\Support\Facades\Route;

Route::get('/', [\App\Http\Controllers\HomeController::class], 'pages.index');

Route::get('/inventories', [\App\Http\Controllers\InventoryController::class], 'index');

    return View('pages.inventories');
;

我的 HomeController 代码:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

/**
 *
 */
class HomeController extends Controller

    public function index() 
        return view('pages.index');
    

我的 InventoryController 代码:

<?php

namespace App\Http\Controllers;

use App\Models\Inventory;
use Illuminate\Http\Request;

/**
 *
 */

class InventoryController extends Controller

    public function index() 
        $inventories = Inventory::all();
        return view('pages.inventories',[
            "inventories" => $inventories
        ]);
    

我知道我不想使用 __invoke(),因为将来会添加功能和内容。

【问题讨论】:

删除“页面”。在您的路线文件上。您应该使用您希望在 HomeController 上调用的方法名称。 Route::get('/', [\App\Http\Controllers\HomeController::class], 'index'); @Santos 第三个参数是路由名称,所以“pages.index”是有效的。问题是缺少数组的第二个元素,正如您所说,它应该包含方法名称。 【参考方案1】:
Route::get('/', [\App\Http\Controllers\HomeController::class, 'index']);

Route::get('/inventories', [\App\Http\Controllers\InventoryController::class, 'index']);

第二个参数也应该很大 在控制器名称中,方法名称是 index 而不是 pages.index

【讨论】:

【参考方案2】:

您误用了路由器定义,您需要定义数组的第二个元素,作为它应该命中的控制器上的方法。

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

您似乎还使用第三个参数作为命名,例如。 pages.index 我会改用-&gt;name() 调用。

【讨论】:

【参考方案3】:

你可以这样写,

<?php

use Illuminate\Support\Facades\Route;

Route::get('/', [ 
    \App\Http\Controllers\HomeController::class, 
    'pages.index' 
]);

【讨论】:

以上是关于使用php Laravel控制器和路由器的Function()不存在错误[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 中使用无需身份验证的 api 路由

将 Laravel 包含到自定义 PHP 脚本中并路由到控制器

二PHP框架Laravel学习笔记——路由的定义和控制器

五PHP框架Laravel学习笔记——回退当前路由单行为

php Laravel ~ 属性【控制器】不存在

php中laravel框架的控制器如何获取路由传过来的可选参数?