路由中“使用”的Laravel 8数组可调用语法不起作用

Posted

技术标签:

【中文标题】路由中“使用”的Laravel 8数组可调用语法不起作用【英文标题】:Laravel 8 array callable syntax for 'uses' in route not working 【发布时间】:2021-01-07 17:17:52 【问题描述】:
Route::post('/update-client', 
    array(
        'uses' =>  'Client\API\ClientAPIController@Update', 
        'as'   =>  'apiUpdateClient',
    )
);

Route::post('/delete-client', 
    array(
        'uses' =>  'Client\API\ClientAPIController@Delete', 
        'as'   =>  'apiDeleteClient',
    )
);

但是,这些路由现在在 Laravel 8 中不起作用。以下是错误详细信息

目标类 [Client\API\ClientAPIController] 不存在。

如果我像下面这样写并修复它,它会起作用

Route::post('/update-client', 
    array(
        'uses' =>  'App\Http\Controller\Client\API\ClientAPIController@Update', 
        'as'   =>  'apiUpdateClient',
    )
);

问题-

我的路由文件包含许多客户端路由。所以,我没有在每条路由中附加 App\Http\Controller,而是想像下面那样做,

use App\Http\Controllers\Client\API\ClientAPIController;

Route::post('/update-client', 
    array(
        'uses' =>  [ClientAPIController::class, 'Update'], 
        'as'   =>  'apiUpdateClient',
    )
);

上面的代码给了我错误,,,

ReflectionFunction::__construct() 期望参数 1 是字符串, 给定数组

我是否使用错误的语法来使用 uses 参数?

【问题讨论】:

我看了视频。但他们没有告诉任何关于用途和作为参数的信息。你能推荐吗? @lagbox:问题现在更清楚了。 你能提供更多当前错误的堆栈跟踪吗 @lagbox:请检查我的路线。它们在 Laravel 7 中运行良好,但在 Laravel 8 中根本无法运行。我通过更改上述代码来修复它。现在,您能否建议,如何在不使用 uses 参数中的字符串语法的情况下初始化类? 我明白你在说什么,这不是在注册路线时,而是在实际调度到该路线时出现错误......我会进一步研究,可能需要注册laravel 的一个问题 【参考方案1】:

你有使用新方法:


Route::post(
    '/update-client',
    [ClientAPIController::class, 'update']
)->name('apiUpdateClient');

Route::post(
    '/delete-client',
    [ClientAPIController::class, 'delete']
)->name('apiDeleteClient');

更多信息:https://laravel.com/docs/8.x/routing#named-routes

【讨论】:

【参考方案2】:

只需删除 laravel 文档中所述的用途即可。

use App\Http\Controllers\Client\API\ClientAPIController;

Route::get('/users', [ClientAPIController::class, 'Update']);

参考本文档 https://laravel.com/docs/8.x/upgrade

突然间他们改变了我们编写 laravel 路由的方式

【讨论】:

我的路线包含usesas。你想让我把这两个都删掉吗? 是的,但是如果你想保留它们,你需要手动更新你的 RouteServiceProviders。请观看此视频。 youtube.com/watch?v=MfE1tnMG6fE&t=239s 8:45 提到 正如我在我的问题中提到的,没有提到任何关于用法的内容。我已经看过视频了

以上是关于路由中“使用”的Laravel 8数组可调用语法不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 8 上获得正确的路线

使用 XAMPP apache 服务器 Laravel 8 时调用路由时出错

laravel 路由修改不起作用解决方案

Laravel 8 - 此路由不支持 POST 方法。支持的方法:删除

Laravel 8 视图不更新路由

如何从 Laravel 8 中的自定义 Web 路由中删除“api/”前缀?