php - Laravel:不采用__invoke方法吗?

标签 php laravel

尝试使用可调用 Controller ,但似乎找不到__invoke方法?

Invalid route action: [App\Http\Controllers\App\Http\Controllers\MainController].

它似乎在以下方面返回true:
if (! method_exists($action, '__invoke')) {
    throw new UnexpectedValueException("Invalid route action: [{$action}].");
}

路线:
<?php

Route::get('/', \App\Http\Controllers\MainController::class);

主 Controller :
<?php

namespace App\Http\Controllers;

class MainController extends Controller
{
    public function __invoke()
    {
        dd('main');
    }
}

最佳答案

Laravel默认情况下假设您的 Controller 将位于App\Http\Controllers\。因此,当您将完整路径添加到 Controller 时,Laravel将在App\Http\Controllers\App\Http\Controllers\MainController处进行检查。

要解决它,只需在注册路由时删除 namespace ,然后像这样注册它:

Route::get('/', MainController::class);

或者,可以通过从位于->namespace($this->namespace)文件夹中的mapWebRoutes()类上的RouteServiceProvider方法删除App\Providers来停止此行为。然后,您可以像这样注册您的路线:
Route::get('/', \App\Http\Controllers\MainController::class);

关于php - Laravel:不采用__invoke方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57501421/

相关文章:

php - MySQL : reset id start from 1 if day change

php - Laravel - 如何传递变量来重置密码模板?

php - str_replace 替换多个字符串 - php 和 laravel

php - 在 Laravel 5 中获取 URL 段

php - Laravel,sync() - 如何同步数组并传递额外的数据透视字段?

laravel - Codeception,无法模拟ajax行为

php - 将 cms 和静态页面 block magento 从一个数据库导出到另一个数据库

PHP 或 MYSQL : how to group results by ROW?

php - 在这个图像像素循环中我做错了什么?

javascript - Laravel 不在函数中接受参数