函数名称必须是Laravel中的字符串

时间:2019-09-19 18:39:15

标签: laravel

Laravel框架5.6.39 我收到此错误:

Symfony \ Component \ Debug \ Exception \ FatalThrowableError (E_ERROR)
Function name must be a string

这就是我在做什么。在我的App/RouteServiceProvider.php

public function map()
{
    $this->mapApiRoutes();

    $this->mapWebRoutes();

    $this->mapMercuriusRoutes();
}

protected function mapMercuriusRoutes()
{
  Route::middleware(['web','auth','Mercurius'])
        ->namespace('\Launcher\Mercurius\Http\Controllers')
        ->group(base_path('routes/mercurius.php'));
}

然后我的路线文件mercurius.php

// Mercurius home
Route::get('/messages', ['as' => 'home', 'uses' => 'MessagesController@index']);
// User Profile
Route::get('/profile/refresh', 'ProfileController@refresh');
Route::get('/profile/notifications', 'ProfileController@notifications');
Route::post('/profile', 'ProfileController@update');

当我访问Mercurius路由文件中列出的localhost:8000 / messages时,出现错误。知道我在做什么错吗?

编辑:初始错误:

$response = method_exists($pipe, $this->method)
                                ? $pipe->{$this->method}(...$parameters)
                                : $pipe(...$parameters);

$ pipe(... $ parameters);是突出显示的一个。

Symfony\Component\Debug\Exception\FatalThrowableError 
…/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php152

Illuminate\Pipeline\Pipeline Illuminate\Pipeline\{closure}
…/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php53

Illuminate\Routing\Pipeline Illuminate\Routing\{closure}
…/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php41

2 个答案:

答案 0 :(得分:2)

我认为错误是在group通话中。您应该使用这样的回调:

Route::middleware(['web','auth','Mercurius'])
    ->namespace('\Launcher\Mercurius\Http\Controllers')
    ->group(function ($r) {
        require base_path('routes/mercurius.php');
    });

检查是否有帮助。

答案 1 :(得分:1)

确保已在路由服务提供者中正确定义并注册了Mercurius中间件。