Php Laravel 5:未找到事件类名称空间/类

Php Laravel 5:未找到事件类名称空间/类,php,events,laravel,namespaces,Php,Events,Laravel,Namespaces,这更像是一个PHP名称空间问题,而不是一个Laravel问题。我将在Laravel中创建我的第一个事件和处理程序。我非常仔细地遵循手册,还有 My EventServiceProvider.php脚本包括: /** * The event handler mappings for the application. * * @var array */ protected $listen = [ 'event.name' => [ 'EventListener'

这更像是一个PHP名称空间问题,而不是一个Laravel问题。我将在Laravel中创建我的第一个事件和处理程序。我非常仔细地遵循手册,还有

My EventServiceProvider.php脚本包括:

/**
 * The event handler mappings for the application.
 *
 * @var array
 */
protected $listen = [
    'event.name' => [
        'EventListener'
    ],
    'App\Events\LeadSignup' => [
        'App\Handlers\Events\SendLeadNotification',
    ],  
];
我不确定这是否正确,但它似乎起了作用。我已经创建了/app/Handlers/Events/SendLeadNotification.php文件,其中包含:

<?php namespace App\Handlers\Events;

use App\Events\LeadSignup;

use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldBeQueued;

class SendLeadNotification {

    /**
     * Create the event handler.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Handle the event.
     *
     * @param  LeadSignup  $event
     * @return void
     */
    public function handle(LeadSignup $event)
    {
        print("handling it");
        print_r($event);
        exit(0);
    }

}
但这导致了一个错误:

找不到类App\Http\Controllers\Site\LeadSignup

最后,通过明确LeadSignup类的位置,我能够解决这个问题:

\Event::fire(new \App\Events\LeadSignup($lead));
我的问题是:如何使代码更漂亮,就像在Laravel文档中,我可以简单地调用:

\Event::fire(new LeadSignup($lead));
??或者,换一种方式问,如何将LeadSignup类添加到全局命名空间?(如果我弄错了术语,我深表歉意。)

解决了的! lpeharda的回答对我有用。我正在控制器代码中触发事件:

\Event::fire(new LeadSignup($lead));
一旦我加上

use App\Events\LeadSignup
。。对于我的控制器代码,可以找到该类。以下是我的完整控制器代码,以便您可以看到它的运行:

<?php

namespace App\Http\Controllers\Site;

use App\Http\Controllers\Controller;
use App\Events\LeadSignup; // <=== here's the additional code

class LeadsController extends Controller {

    public function __construct()
    {
        parent::__construct();      
    }

    public function postInsert()
    {
        if(! \Lead::where('email', '=', \Request::input('email'))->exists()) 
        {
           $lead = \Lead::create(\Request::all());
           \Event::fire(new LeadSignup($lead));
        }
    }

}

?>

调用文件中的

\Event::fire(new LeadSignup($lead));
您需要添加/使用LeadSignup事件的命名空间

例如,在该文件的顶部添加

use App\Events\LeadSignup
就在打开的PHP标记下方(以及最终的命名空间声明下方):


facade和我可以确定确切的位置

在您呼叫的文件中

\Event::fire(new LeadSignup($lead));
您需要添加/使用LeadSignup事件的命名空间

例如,在该文件的顶部添加

use App\Events\LeadSignup
就在打开的PHP标记下方(以及最终的命名空间声明下方):


facade和我可以确定确切的位置

皇家背景,我听到你在说什么了。我认为lpeharda指的是我的控制器文件的顶部,我的\Event::fire(..)代码就在这里。一旦我添加了他建议的“使用”语句,它就完美地工作了。谢谢大家!皇家背景,我听到你在说什么了。我认为lpeharda指的是我的控制器文件的顶部,我的\Event::fire(..)代码就在这里。一旦我添加了他建议的“使用”语句,它就完美地工作了。谢谢大家!
<?php
Event::fire()