Subversion-Projekte lars-tiefland.laravel_shop

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
148 lars 1
<?php
2
 
3
namespace Illuminate\Foundation\Console;
4
 
5
use Illuminate\Console\Command;
6
use Illuminate\Foundation\Support\Providers\EventServiceProvider;
7
use Symfony\Component\Console\Attribute\AsCommand;
8
 
9
#[AsCommand(name: 'event:generate')]
10
class EventGenerateCommand extends Command
11
{
12
    /**
13
     * The console command name.
14
     *
15
     * @var string
16
     */
17
    protected $name = 'event:generate';
18
 
19
    /**
20
     * The name of the console command.
21
     *
22
     * This name is used to identify the command during lazy loading.
23
     *
24
     * @var string|null
25
     *
26
     * @deprecated
27
     */
28
    protected static $defaultName = 'event:generate';
29
 
30
    /**
31
     * The console command description.
32
     *
33
     * @var string
34
     */
35
    protected $description = 'Generate the missing events and listeners based on registration';
36
 
37
    /**
38
     * Execute the console command.
39
     *
40
     * @return void
41
     */
42
    public function handle()
43
    {
44
        $providers = $this->laravel->getProviders(EventServiceProvider::class);
45
 
46
        foreach ($providers as $provider) {
47
            foreach ($provider->listens() as $event => $listeners) {
48
                $this->makeEventAndListeners($event, $listeners);
49
            }
50
        }
51
 
52
        $this->components->info('Events and listeners generated successfully.');
53
    }
54
 
55
    /**
56
     * Make the event and listeners for the given event.
57
     *
58
     * @param  string  $event
59
     * @param  array  $listeners
60
     * @return void
61
     */
62
    protected function makeEventAndListeners($event, $listeners)
63
    {
64
        if (! str_contains($event, '\\')) {
65
            return;
66
        }
67
 
68
        $this->callSilent('make:event', ['name' => $event]);
69
 
70
        $this->makeListeners($event, $listeners);
71
    }
72
 
73
    /**
74
     * Make the listeners for the given event.
75
     *
76
     * @param  string  $event
77
     * @param  array  $listeners
78
     * @return void
79
     */
80
    protected function makeListeners($event, $listeners)
81
    {
82
        foreach ($listeners as $listener) {
83
            $listener = preg_replace('/@.+$/', '', $listener);
84
 
85
            $this->callSilent('make:listener', array_filter(
86
                ['name' => $listener, '--event' => $event]
87
            ));
88
        }
89
    }
90
}