Laravel 8,异常,无法调试



我在laravel项目中使用了一个观察者类,它抛出了一个神秘的错误。踪迹在下面。在/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php(237)类中,调度方法试图在空有效载荷上运行侦听器,我认为这是传递给侦听器的模型实例。我使用的模型事件是"saving"事件,但是被调用的控制器动作只是执行一个选择查询,它没有做任何改变,所以我不希望这个事件被抛出。

我已经确认,通过不在服务提供者中注册观察者,错误不再存在,但是当我注册观察者并注释掉观察者类中的任何方法时,错误仍然发生。

这是一个旅行bug吗?

我包括:

  • 控制器动作
  • <
  • 调度器类/gh><
  • 异常跟踪/gh>

** edit **

  • 服务提供程序引导方法

控制器动作:

/**
* Display a listing of the resource.
*
* @param AppModelsCrop $crop
* @return IlluminateHttpResponse
*/
public function index(Request $request)
{
$crop = null;
if ($request->filled('crop_id')) {
$crop = Crop::find($request->query('crop_id'));
$chyps = $crop->harvest_year_pubs->withoutGlobalScopes();
} else {
$chyps = CropHarvestYearPublication::orderBy('crop_id');
}
if ($request->filled('sort_by')) {
if ($request->query('sort_order') === 'desc') {
$chyps->sortByDesc($request->query('sort_by'));
} else {
$chyps->sortBy($request->query('sort_by'));
}
}
return view('admin.data.chyp.index', [
'chyps' => $chyps->paginate(15),
'crop'  => $crop,
'crops' => Crop::withoutGlobalScopes()->get(),
'sort_by' => $request->query('sort_by'),
'sort_order' => $request->query('sort_order')
]);
}

/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php第237行是错误发生的地方:

/**
* Fire an event and call the listeners.
*
* @param  string|object  $event
* @param  mixed  $payload
* @param  bool  $halt
* @return array|null
*/
public function dispatch($event, $payload = [], $halt = false)
{
// When the given "event" is actually an object we will assume it is an event
// object and use the class as the event name and this event itself as the
// payload to the handler, which makes object based events quite simple.
[$event, $payload] = $this->parseEventAndPayload(
$event, $payload
);
if ($this->shouldBroadcast($payload)) {
$this->broadcastEvent($payload[0]);
}
$responses = [];
foreach ($this->getListeners($event) as $listener) {
$response = $listener($event, $payload); // LINE 237 - where the error is thrown
// If a response is returned from the listener and event halting is enabled
// we will just return this response, and not call the rest of the event
// listeners. Otherwise we will add the response on the response list.
if ($halt && ! is_null($response)) {
return $response;
}
// If a boolean false is returned from a listener, we will stop propagating
// the event to any further listeners down in the chain, else we keep on
// looping through the listeners and firing every one in our sequence.
if ($response === false) {
break;
}
$responses[] = $response;
}
return $halt ? null : $responses;
}

异常跟踪:

[2021-02-17 14:33:44] testing.ERROR: Function name must be a string {"userId":1,"exception":"[object] (Error(code: 0): Function name must be a string at /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php:392)
[stacktrace]
#0 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php(237): Illuminate\Events\Dispatcher->Illuminate\Events\{closure}('eloquent.retrie...', Array)
#1 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasEvents.php(189): Illuminate\Events\Dispatcher->dispatch('eloquent.retrie...', Array)
#2 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(434): Illuminate\Database\Eloquent\Model->fireModelEvent('retrieved', false)
#3 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(345): Illuminate\Database\Eloquent\Model->newFromBuilder(Object(stdClass))
#4 [internal function]: Illuminate\Database\Eloquent\Builder->Illuminate\Database\Eloquent\{closure}(Object(stdClass))
#5 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(344): array_map(Object(Closure), Array)
#6 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php(23): Illuminate\Database\Eloquent\Builder->hydrate(Array)
#7 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(1885): Illuminate\Database\Eloquent\Model->forwardCallTo(Object(Illuminate\Database\Eloquent\Builder), 'hydrate', Array)
#8 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(588): Illuminate\Database\Eloquent\Model->__call('hydrate', Array)
#9 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(572): Illuminate\Database\Eloquent\Builder->getModels(Array)
#10 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(772): Illuminate\Database\Eloquent\Builder->get(Array)
#11 /Users/apages/code/variety-testing/app/Http/Controllers/Admin/CropHarvestYearPublicationController.php(38): Illuminate\Database\Eloquent\Builder->paginate(15)
#12 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): App\Http\Controllers\Admin\CropHarvestYearPublicationController->index(Object(Illuminate\Http\Request))
#13 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45): Illuminate\Routing\Controller->callAction('index', Array)
#14 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Routing/Route.php(254): Illuminate\Routing\ControllerDispatcher->dispatch(Object(Illuminate\Routing\Route), Object(App\Http\Controllers\Admin\CropHarvestYearPublicationController), 'index')
#15 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Routing/Route.php(197): Illuminate\Routing\Route->runController()
#16 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Routing/Router.php(693): Illuminate\Routing\Route->run()
#17 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\Routing\Router->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#18 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#19 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Routing\Middleware\SubstituteBindings->handle(Object(Illuminate\Http\Request), Object(Closure))
#20 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(78): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#21 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle(Object(Illuminate\Http\Request), Object(Closure))
#22 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#23 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\View\Middleware\ShareErrorsFromSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#24 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(121): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#25 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(63): Illuminate\Session\Middleware\StartSession->handleStatefulRequest(Object(Illuminate\Http\Request), Object(Illuminate\Session\Store), Object(Closure))
#26 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Session\Middleware\StartSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#27 /Users/apages/code/variety-testing/app/Http/Middleware/CASAuth.php(46): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#28 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\Http\Middleware\CASAuth->handle(Object(Illuminate\Http\Request), Object(Closure), 'admin')
#29 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#30 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle(Object(Illuminate\Http\Request), Object(Closure))
#31 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#32 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Cookie\Middleware\EncryptCookies->handle(Object(Illuminate\Http\Request), Object(Closure))
#33 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#34 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Routing/Router.php(695): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#35 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Routing/Router.php(670): Illuminate\Routing\Router->runRouteWithinStack(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request))
#36 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Routing/Router.php(636): Illuminate\Routing\Router->runRoute(Object(Illuminate\Http\Request), Object(Illuminate\Routing\Route))
#37 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Routing/Router.php(625): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
#38 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(166): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#39 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}(Object(Illuminate\Http\Request))
#40 /Users/apages/code/variety-testing/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(60): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#41 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Barryvdh\Debugbar\Middleware\InjectDebugbar->handle(Object(Illuminate\Http\Request), Object(Closure))
#42 /Users/apages/code/variety-testing/vendor/fideloper/proxy/src/TrustProxies.php(57): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#43 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fideloper\Proxy\TrustProxies->handle(Object(Illuminate\Http\Request), Object(Closure))
#44 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#45 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))
#46 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#47 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))
#48 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#49 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle(Object(Illuminate\Http\Request), Object(Closure))
#50 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#51 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance->handle(Object(Illuminate\Http\Request), Object(Closure))
#52 /Users/apages/code/variety-testing/vendor/fruitcake/laravel-cors/src/HandleCors.php(37): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#53 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fruitcake\Cors\HandleCors->handle(Object(Illuminate\Http\Request), Object(Closure))
#54 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#55 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(141): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#56 /Users/apages/code/variety-testing/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(110): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
#57 /Users/apages/code/variety-testing/public/index.php(17): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
#58 /Users/apages/code/variety-testing/server.php(21): require_once('/Users/apages/c...')
#59 {main}

服务提供程序引导方法

/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{

CropHarvestYearPublication::observe(CropHarvestYearPublication::class);
}

根据你最近的编辑,我看到一个问题,你的观察者和模型使用相同的类名,我建议你将你的模型或观察者别名如下

混叠模型
use AppModelsCropHarvestYearPublication as CropHarvestYearPublicationModel;
use AppObserversCropHarvestYearPublication;
/**
* Register any events for your application.
*
* @return void
*/
public function boot()
{
CropHarvestYearPublicationModel::observe(CropHarvestYearPublication::class);
}

混叠的观察者

use AppModelsCropHarvestYearPublication;
use AppObserversCropHarvestYearPublication as CropHarvestYearPublicationObserver;
/**
* Register any events for your application.
*
* @return void
*/
public function boot()
{
CropHarvestYearPublication::observe(CropHarvestYearPublicationObserver::class);
}

那可能就是你出错的原因。试一试

最新更新