1. Code
  2. PHP
  3. Laravel

Ihr One-Stop-Leitfaden für Laravel-Befehle

Scroll to top

German (Deutsch) translation by Alex Grigorovich (you can also view the original English article)

Heutzutage ist es für Entwickler ganz normal, sich mit Konsolen und der Ausgabe grundlegender Befehle vertraut zu machen. Aber was wäre, wenn Sie Ihre eigenen benutzerdefinierten Befehle codieren könnten, um Ihren Workflow zu verbessern? Wenn wir auf Laravel 3 zurückblicken, werden Sie sich vielleicht daran erinnern, dass es Aufgaben bot. Aufgaben waren äußerst hilfreich, kamen aber für komplexere Operationen immer noch zu kurz. Zum Glück packt Laravel 4 einen aufgemotzten Artisan, der Ihnen das Leben als Entwickler so viel einfacher macht!


Was ist Handwerker?

Artisan ist das Befehlszeilenprogramm, das in Laravel 3 veröffentlicht wurde.

Wenn Sie mit Laravel nicht vertraut sind, kennen Sie Artisan möglicherweise nicht. Artisan ist das Befehlszeilenprogramm, das in Laravel 3 veröffentlicht wurde. Wenn Sie andere Frameworks verwendet haben, können Sie Artisan mit Oil in FuelPHP, ZFTool in Zend oder der Konsole in Symfony 2 vergleichen.

Artisan bietet viele nützliche Befehle, mit denen Sie verschiedene Aufgaben ausführen können, z. B. das Generieren von Migrationen oder das Veröffentlichen der Assets eines Pakets. Zusätzlich zu den integrierten Befehlen können Sie Artisan um Ihre eigenen Befehle erweitern.


Handwerker-Stiftungen

Hier schöpft Artisan seine Kraft.

In Laravel 3 wurde Artisan von Taylor Otwell (Laravels Schöpfer) von Grund auf neu geschrieben, daher war es ziemlich einfach (obwohl immer noch großartig). Jetzt, da Laravel 4 auf Composer basiert, kann es vorhandene Pakete verwenden, die von anderen brillanten Entwicklern entwickelt wurden. Daher hängt Laravel 4 jetzt von zahlreichen Paketen aus dem Symfony-Framework ab. Eines dieser Pakete ist die hervorragende Konsolenkomponente.

Wenn wir uns die Quelle der Artisan-Anwendung unter Illuminate\Console\Application ansehen, sehen wir, dass die Klasse selbst Symfony\Component\Console\Application erweitert. Hier schöpft Artisan seine Kraft. Obwohl Artisan die Konsolenkomponente von Symfony verwendet, wurden vielen gängigen Methoden flüssigere Laravel-ähnliche Aliase zugewiesen. Also mach dir keine Sorgen, es wird sich immer noch so anfühlen, als würdest du dich mit Laravel entwickeln!


Häufige Fragen

Beim Versuch, einen neuen Befehl zu entwickeln, werden normalerweise zwei Fragen angezeigt.

F Wo soll ich Befehle platzieren?

Wenn Sie eine Kopie von Laravel installieren, finden Sie unter app/command ein vordefiniertes Verzeichnis. Dieses Verzeichnis befindet sich standardmäßig auch in der classmap Ihrer composer.json. Dies bedeutet, dass Sie nach dem Erstellen eines Befehls den composer dump-autoload ausführen müssen, um eine aktualisierte Autoload-Datei zu generieren. Wenn Sie dies nicht tun, erhalten Sie Fehler und beschweren sich, dass Ihr Befehl nicht gefunden werden kann.

Wenn Sie ein Paket entwickeln, müssen Sie ein Verzeichnis in Ihrem Paket src/<vendor>/<package> erstellen, um Ihre Befehle zu speichern. In der gesamten Laravel 4-Codebasis heißt dieses Verzeichnis Console. Denken Sie daran, sicherzustellen, dass das Verzeichnis in Ihren Paketen composer.json automatisch geladen wird.

F Wie soll ich Befehle benennen?

In der gesamten Laravel 4-Codebasis werden alle Befehle mit dem Suffix Command versehen und nach der von ihnen ausgeführten Aufgabe benannt. Angenommen, Sie haben einen Befehl, der Ihren Cache löscht. Sie können diesen Befehl CacheClearCommand nennen.


Grundlagen eines Befehls

Ein Befehl sollte eine einzelne Aufgabe ausführen. Im weiteren Verlauf dieses Artikels werden wir einen Benutzergeneratorbefehl entwickeln. Lassen Sie uns die Grundlagen eines Befehls überprüfen.

1
// app/commands/UserGeneratorCommand.php
2
3
<?php
4
5
use Illuminate\Console\Command;
6
7
class UserGeneratorCommand extends Command {
8
9
    /**

10
     * The console command name.

11
     *

12
     * @var string

13
     */
14
    protected $name = 'user:generate';
15
16
    /**

17
     * The console command description.

18
     *

19
     * @var string

20
     */
21
    protected $description = "Generate a new user";
22
23
    /**

24
     * Execute the console command.

25
     *

26
     * @return void

27
     */
28
    public function fire()
29
    {
30
        $this->line('Welcome to the user generator.');
31
    }
32
33
}

Laravel kann diesen Boilerplate-Code für Sie generieren! Einfach ausführen:

1
$ php artisan command:make UserGeneratorCommand

Dadurch wird ein Skelettbefehl erstellt, den Sie ändern können. Für die Zwecke dieses Lernprogramms werden wir jedoch einen Befehl von Grund auf neu erstellen, damit wir jeden Teil des Prozesses lernen können.

Befehlsname

Alle Befehle müssen einen Namen angeben. Dieser Name wird verwendet, um den Befehl von der Konsole aus auszuführen, und sollte die Aufgabe beschreiben, die der Befehl ausführt. Es gibt zwar keine Konvention für die Benennung Ihres Befehls, Sie können jedoch eine der folgenden Optionen in Betracht ziehen: namespace:group/command, namespace:command oder nur command.

Befehlsbeschreibung

Alle Befehle müssen eine Beschreibung enthalten. Die Beschreibung wird verwendet, wenn Sie eine Liste der verfügbaren Befehle von Artisan abrufen und die Hilfedokumente für einen Befehl anzeigen. Beschreibungen sollten kurz die Aufgabe beschreiben, die der Befehl ausführt.

Wenn wir unsere Konsole öffnen und eine Liste der verfügbaren Befehle abrufen, wird unser Befehl immer noch nicht aufgelistet.

1
$ php artisan list
2
Laravel Framework version 4.0.0
3
4
Usage:
5
  [options] command [arguments]
6
7
Options:
8
  --help           -h Display this help message.
9
  --quiet          -q Do not output any message.
10
  --verbose        -v Increase verbosity of messages.
11
  --version        -V Display this application version.
12
  --ansi              Force ANSI output.
13
  --no-ansi           Disable ANSI output.
14
  --no-interaction -n Do not ask any interactive question.
15
  --env               The environment the command should run under.
16
17
Available commands:
18
  help               Displays help for a command

19
  list               Lists commands
20
  migrate            Run the database migrations
21
  serve              Serve the application on the PHP development server
22
  tinker             Interact with your application
23
  workbench          Create a new package workbench
24
asset
25
  asset:publish      Publish a package's assets to the public directory

26
auth

27
  auth:reminders     Create a migration for the password reminders table

28
command

29
  command:make       Create a new Artisan command

30
config

31
  config:publish     Publish a package's configuration to the application
32
controller
33
  controller:make    Create a new resourceful controller
34
db
35
  db:seed            Seed the database with records
36
key
37
  key:generate       Set the application key
38
migrate
39
  migrate:install    Create the migration repository
40
  migrate:make       Create a new migration file
41
  migrate:refresh    Reset and re-run all migrations
42
  migrate:reset      Rollback all database migrations
43
  migrate:rollback   Rollback the last database migration
44
queue
45
  queue:listen       Listen to a given queue
46
  queue:work         Process the next job on a queue
47
session
48
  session:table      Create a migration for the session database table

Um unseren neuen Befehl zu registrieren, öffnen Sie app/start/artisan.php und lesen Sie schnell den Standardkommentarblock durch, der sich dort befindet. Wenn wir Artisan von der Konsole aus ausführen, ist diese Datei enthalten. Wir werden es verwenden, um unsere Befehle zu booten. In dieser Datei haben wir Zugriff auf eine $artisan-Variable, die vor dem Einfügen der Datei deklariert wurde. Erinnern Sie sich an die Artisan-Anwendungsklasse, die wir uns zuvor angesehen haben? Derjenige, der die Symfony Console-Komponente erweitert hat? Nun, $artisan ist eine Instanz dieser Klasse.

Fügen wir unseren Befehl hinzu, um ihn in der Konsole verfügbar zu machen.

1
$artisan->add(new UserGeneratorCommand);

Oder wenn Sie die statische Syntax bevorzugen:

1
Artisan::add(new UserGeneratorCommand);

Die add-Methode akzeptiert eine Befehlsinstanz. Sobald unser Befehl hinzugefügt wurde, können wir über die Konsole darauf zugreifen.

1
$ php artisan user:generate
2
Welcome to the user generator.

Der Befehl sollte auch in den verfügbaren Befehlen sowie in den Hilfeinformationen aufgeführt sein.

1
$ php artisan list
1
$ php artisan user:generate --help
2
Usage:
3
 user:generate
4
5
Options:
6
 --help (-h)           Display this help message.
7
 --quiet (-q)          Do not output any message.
8
 --verbose (-v)        Increase verbosity of messages.
9
 --version (-V)        Display this application version.
10
 --ansi                Force ANSI output.
11
 --no-ansi             Disable ANSI output.
12
 --no-interaction (-n) Do not ask any interactive question.
13
 --env                 The environment the command should run under.

Wenn Sie Fehler erhalten, stellen Sie sicher, dass Sie composer dump autoload von Ihrem Anwendungsstamm aus ausführen, nachdem Sie den Befehl erstellt haben.


Farbige Ausgabe

Die Ausgabe von farbigem Text an die Konsole ist in Artisan ein Kinderspiel. Es gibt vier verschiedene Hilfsmethoden, um farbige ANSI-Ausgaben wiederzugeben.

1
$this->info("This is some information.");
2
3
$this->comment("This is a comment.");
4
5
$this->question("This is a question.");
6
7
$this->error("This is an error.");

Optionen und Argumente

Eine aufregende neue Funktion von Artisan ist die Möglichkeit, einem Befehl Optionen und Argumente bereitzustellen.

Argumente

Argumente sind Zeichenfolgen, die Sie an einen Befehl senden. Sie müssen einem Befehl in der Reihenfolge übergeben werden, in der sie definiert sind. Betrachten Sie den folgenden Befehl:

1
$ php artisan user:generate [name] [email]

Das name-Argument muss vor dem email-Argument angegeben werden.

Argumente können als optional definiert werden.

Optionen

Optionen sind immer optional und werden, sofern vorhanden, mit zwei Bindestrichen versehen.

1
$ php artisan user:generate --admin

Neben der Verwendung als boolesche Schalter kann eine Option so konfiguriert werden, dass sie einen Wert oder ein Array von Werten akzeptiert.

1
$ php artisan user:generate --name=Jason
2
$ php artisan user:generate --role=user --role=editor

Optionen und Argumente definieren

Bevor wir unsere Optionen und Argumente definieren, ist es am besten, die erforderlichen Symfony-Klassen zu importieren (sie sind lang und es wäre mühsam, sie ständig zu schreiben). Die beiden Klassen, die wir benötigen, sind Symfony\Component\Console\Input\InputOption und Symfony\Component\Console\Input\InputArgument.

Über unserer Klassendeklaration importieren wir beide Klassen.

1
// app/commands/UserGenerateCommand.php
2
3
<?php
4
5
use Illuminate\Console\Command;
6
use Symfony\Component\Console\Input\InputOption;
7
use Symfony\Component\Console\Input\InputArgument;
8
9
class UserGeneratorCommand extends Command {
10
11
    /**

12
     * The console command name.

13
     *

14
     * @var string

15
     */
16
    protected $name = 'user:generate';
17
18
    /**

19
     * The console command description.

20
     *

21
     * @var string

22
     */
23
    protected $description = "Generate a new user";
24
25
    /**

26
     * Execute the console command.

27
     *

28
     * @return void

29
     */
30
    public function fire()
31
    {
32
        $this->line('Welcome to the user generator.');
33
    }
34
35
}

Um die Optionen und Argumente zu definieren, müssen Sie zwei neue Methoden erstellen: getArguments und getOptions. Beide Methoden geben ein Array von Argumenten oder Optionen zurück. Lassen Sie unseren Befehl ein name-Argument und eine age-Option akzeptieren.

1
// app/commands/UserGenerateCommand.php
2
3
<?php
4
5
use Illuminate\Console\Command;
6
use Symfony\Component\Console\Input\InputOption;
7
use Symfony\Component\Console\Input\InputArgument;
8
9
class UserGeneratorCommand extends Command {
10
11
    /**

12
     * The console command name.

13
     *

14
     * @var string

15
     */
16
    protected $name = 'user:generate';
17
18
    /**

19
     * The console command description.

20
     *

21
     * @var string

22
     */
23
    protected $description = "Generate a new user";
24
25
    /**

26
     * Execute the console command.

27
     *

28
     * @return void

29
     */
30
    public function fire()
31
    {
32
        $this->line('Welcome to the user generator.');
33
34
        // Get the name arguments and the age option from the input instance.

35
        $name = $this->argument('name');
36
37
        $age = $this->option('age');
38
39
        $this->line("{$name} is {$age} years old.");
40
    }
41
42
    /**

43
     * Get the console command arguments.

44
     *

45
     * @return array

46
     */
47
    protected function getArguments()
48
    {
49
        return array(
50
            array('name', InputArgument::REQUIRED, 'Name of the new user'),
51
        );
52
    }
53
54
    /**

55
     * Get the console command options.

56
     *

57
     * @return array

58
     */
59
    protected function getOptions()
60
    {
61
        return array(
62
            array('age', null, InputOption::VALUE_REQUIRED, 'Age of the new user')
63
        );
64
    }
65
66
}

Denken Sie daran: Laravel kann den gesamten Code für Sie generieren. Wir machen es einfach manuell, um jede Zeile in der Klasse zu überprüfen.

Jetzt können wir über unsere Konsole ein name-Argument und eine age-Option bereitstellen.

1
$ php artisan user:generate Jason --age=22
2
Jason is 22 years old.

Sowohl Argumente als auch Optionen werden als mehrdimensionale Arrays definiert. Schauen wir uns die Definitionen für jede von ihnen genauer an.

Argumentdefinitionen

Die Array-Definition für ein Argument akzeptiert vier Schlüssel, wobei nur der erste (der Name des Arguments) erforderlich ist. Der zweite Schlüssel ist der Argumentationsmodus und sollte entweder InputArgument::OPTIONAL oder InputArgument::REQUIRED sein. Der dritte ist die Beschreibung und der vierte Schlüssel ist ein Standardwert, wenn der Modus auf InputArgument::OPTIONAL eingestellt ist.

Hier ist ein Argument, bei dem alle Array-Schlüssel verwendet werden.

1
array('name', InputArgument::OPTIONAL, 'Name of the new user', 'Jason')

Optionsdefinitionen

Die Array-Definition für eine Option akzeptiert fünf Schlüssel, wobei nur der erste (der Optionsname) erforderlich ist. Die zweite Taste ist eine Verknüpfung für die Option (z. B. -a). Der dritte ist der Optionsmodus und kann einer der folgenden Werte sein: InputOption::VALUE_NONE, InputOption::VALUE_REQUIRED, InputOption::VALUE_OPTIONAL oder InputOption::VALUE_IS_ARRAY. Der vierte Schlüssel ist die Optionsbeschreibung, und der fünfte Schlüssel ist ein Standardwert, wenn der Modus nicht InputOption::VALUE_NONE oder InputOption::VALUE_REQUIRED ist.

Hier ist eine Option, bei der alle Array-Schlüssel verwendet werden.

1
array('age', 'a', InputOption::VALUE_OPTIONAL, 'Age of the new user', 22)

Sie können den InputOption::VALUE_IS_ARRAY-Modus auch mit InputOption::VALUE_REQUIRED oder InputOption::VALUE_OPTIONAL kombinieren.

1
array('role', 'r', InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY, 'Roles of the new user', 'user')

Bestätigungen und Fragen

Eine weitere aufregende neue Funktion von Artisan ist die Möglichkeit, eine Bestätigung anzufordern oder dem Benutzer sogar eine Frage zu stellen. Dies macht die Entwicklung interaktiver Befehle so einfach wie möglich.

Bestätigungen

Mit confirm können wir einem Benutzer eine Frage stellen und ihn entweder mit "Ja" oder "Nein" bestätigen lassen. Lassen Sie uns bestätigen, dass der Benutzer sein Alter korrekt eingegeben hat.

1
// app/commands/UserGenerateCommand.php
2
3
<?php
4
5
use Illuminate\Console\Command;
6
use Symfony\Component\Console\Input\InputOption;
7
use Symfony\Component\Console\Input\InputArgument;
8
9
class UserGeneratorCommand extends Command {
10
11
    /**

12
     * The console command name.

13
     *

14
     * @var string

15
     */
16
    protected $name = 'user:generate';
17
18
    /**

19
     * The console command description.

20
     *

21
     * @var string

22
     */
23
    protected $description = "Generate a new user";
24
25
    /**

26
     * Execute the console command.

27
     *

28
     * @return void

29
     */
30
    public function fire()
31
    {
32
        $this->line('Welcome to the user generator.');
33
34
        // Get the name arguments and the age option from the input instance.

35
        $name = $this->argument('name');
36
37
        $age = $this->option('age');
38
39
        if ( ! $this->confirm("Are you really {$age} years old? [yes|no]", true))
40
        {
41
            $this->comment('Then why did you say you were!?');
42
43
            return;
44
        }
45
46
        $this->comment("{$name} is {$age} years old.");
47
    }
48
49
    /**

50
     * Get the console command arguments.

51
     *

52
     * @return array

53
     */
54
    protected function getArguments()
55
    {
56
        return array(
57
            array('name', InputArgument::REQUIRED, 'Name of the new user'),
58
        );
59
    }
60
61
    /**

62
     * Get the console command options.

63
     *

64
     * @return array

65
     */
66
    protected function getOptions()
67
    {
68
        return array(
69
            array('age', null, InputOption::VALUE_REQUIRED, 'Age of the new user', null)
70
        );
71
    }
72
73
}

Der erste Parameter ist die Frage, die Sie stellen möchten, und der zweite ist der Standardwert, wenn ein Benutzer die Eingabetaste drückt, ohne etwas einzugeben.

Fragen

Mit ask können wir einem Benutzer eine Frage stellen und eine Antwort von ihm erwarten. Anstatt unseren Befehl zu beenden, wenn der Benutzer angibt, dass er sein Alter falsch eingegeben hat, bitten wir ihn stattdessen, es erneut einzugeben.

1
// app/commands/UserGenerateCommand.php
2
3
<?php
4
5
use Illuminate\Console\Command;
6
use Symfony\Component\Console\Input\InputOption;
7
use Symfony\Component\Console\Input\InputArgument;
8
9
class UserGeneratorCommand extends Command {
10
11
    /**

12
     * The console command name.

13
     *

14
     * @var string

15
     */
16
    protected $name = 'user:generate';
17
18
    /**

19
     * The console command description.

20
     *

21
     * @var string

22
     */
23
    protected $description = "Generate a new user";
24
25
    /**

26
     * Execute the console command.

27
     *

28
     * @return void

29
     */
30
    public function fire()
31
    {
32
        $this->line('Welcome to the user generator.');
33
34
        // Get the name arguments and the age option from the input instance.

35
        $name = $this->argument('name');
36
37
        $age = $this->option('age');
38
39
        // Confirm the user entered their age correctly and if they haven't we'll

40
        // ask them to enter it again.

41
        if ( ! $this->confirm("Are you really {$age} years old? [yes|no]", true))
42
        {
43
            $age = $this->ask('So how old are you then?');
44
        }
45
46
        $this->comment("{$name} is {$age} years old.");
47
    }
48
49
    /**

50
     * Get the console command arguments.

51
     *

52
     * @return array

53
     */
54
    protected function getArguments()
55
    {
56
        return array(
57
            array('name', InputArgument::REQUIRED, 'Name of the new user'),
58
        );
59
    }
60
61
    /**

62
     * Get the console command options.

63
     *

64
     * @return array

65
     */
66
    protected function getOptions()
67
    {
68
        return array(
69
            array('age', null, InputOption::VALUE_REQUIRED, 'Age of the new user', null)
70
        );
71
    }
72
73
}

Befehlsabhängigkeiten

Die Abhängigkeitsinjektion ist ein wichtiger Schritt, um sicherzustellen, dass Ihr Code testbar und zukunftssicher ist. Gehen wir noch einen Schritt weiter, indem wir eine Modellinstanz einfügen, damit wir den Benutzer generieren können. Wir beginnen mit der Erstellung einer Benutzeroberfläche und eines Benutzermodells.

1
// app/models/UserInterface.php
2
3
<?php
4
5
interface UserInterface {
6
7
}

Unser UserInterface definiert eigentlich keine Methodenimplementierungen, da dies nur ein Beispiel ist. Für eine reale Anwendung definieren Sie die Methoden, die Sie für Ihr Modell erwarten.

1
// app/models/User.php
2
3
<?php
4
5
class User extends Eloquent implements UserInterface {
6
7
    /**

8
     * The database table used by the model.

9
     *

10
     * @var string

11
     */
12
    protected $table = 'users';
13
14
}

Nachdem unser User-Modell unser UserInterface implementiert hat, können wir unsere Abhängigkeit in unserem Befehl weiter einrichten. Ich werde unserem Befehl "generate" etwas mehr hinzufügen und mit dem injizierten User-Modell interagieren.

1
// app/commands/UserGenerateCommand.php
2
3
<?php
4
5
use Illuminate\Console\Command;
6
use Symfony\Component\Console\Input\InputOption;
7
use Symfony\Component\Console\Input\InputArgument;
8
9
class UserGeneratorCommand extends Command {
10
11
    /**

12
     * The console command name.

13
     *

14
     * @var string

15
     */
16
    protected $name = 'user:generate';
17
18
    /**

19
     * The console command description.

20
     *

21
     * @var string

22
     */
23
    protected $description = "Generate a new user";
24
25
    /**

26
     * User model instance.

27
     * 

28
     * @var UserInterface

29
     */
30
    protected $user;
31
32
    /**

33
     * Create a new UserGeneratorCommand instance.

34
     * 

35
     * @param  UserInterface  $user

36
     * @return void

37
     */
38
    public function __construct(UserInterface $user)
39
    {
40
        $this->user = $user;
41
    }
42
43
    /**

44
     * Execute the console command.

45
     *

46
     * @return void

47
     */
48
    public function fire()
49
    {
50
        $this->line('Welcome to the user generator.');
51
52
        // Get the name arguments and the age option from the input instance.

53
        $this->user->name = $this->argument('name');
54
55
        $this->user->age = $this->option('age');
56
57
        // Confirm the user entered their age correctly and if they haven't we'll

58
        // ask them to enter it again. We'll continue asking them until they are

59
        // sure they've entered the right age.

60
        $correctAge = false;
61
62
        while ( ! $correctAge)
63
        {
64
            if ( ! $this->confirm("Are you really {$this->user->age} years old? [yes|no]", true))
65
            {
66
                $this->user->age = $this->ask('So how old are you then?');
67
            }
68
            else
69
            {
70
                $correctAge = true;
71
            }
72
        }
73
74
        $this->user->framework = $this->ask('What is your favorite framework?', 'Laravel');
75
76
        $this->user->website = $this->ask('What is your website address?');
77
78
        // Save the user to the database.

79
        $this->user->save();
80
81
        // Report that the user has been saved.

82
        $this->info("{$this->user->name} has been generated and saved.");
83
    }
84
85
    /**

86
     * Get the console command arguments.

87
     *

88
     * @return array

89
     */
90
    protected function getArguments()
91
    {
92
        return array(
93
            array('name', InputArgument::REQUIRED, 'Name of the new user'),
94
        );
95
    }
96
97
    /**

98
     * Get the console command options.

99
     *

100
     * @return array

101
     */
102
    protected function getOptions()
103
    {
104
        return array(
105
            array('age', null, InputOption::VALUE_REQUIRED, 'Age of the new user', null)
106
        );
107
    }
108
109
}

Das erste, was Sie beachten sollten, ist, dass der Befehl jetzt einen Konstruktor hat. Dieser Konstruktor akzeptiert einen einzelnen Parameter und wir haben den Hinweis UserInterface eingegeben, sodass wir wissen, dass die Klasse, die wir erhalten, die auf der Schnittstelle definierten Methoden implementiert. Befehlskonstruktoren sollten auch den übergeordneten Konstruktor aufrufen.

In der fire-Methode des Befehls weisen wir die Eigenschaften der User-Modellinstanz direkt zu. Wir verwenden auch eine Schleife, um den Benutzer weiterhin zu fragen, ob er sein Alter korrekt eingegeben hat. Zuletzt wird der Benutzer in der Datenbank gespeichert und wir geben an die Konsole aus, dass der Benutzer generiert und gespeichert wurde.

Aber warte! Bevor wir den Befehl verwenden können, müssen wir eine Instanz unseres User-Modells einfügen.

1
// app/start/artisan.php

2
3
$user = new User;
4
5
$artisan->add(new UserGeneratorCommand($user));

Wenn Sie eine Datenbank eingerichtet und korrekt konfiguriert haben, sollten Sie jetzt in der Lage sein, den Befehl auszuführen und einen neuen Benutzer in der Datenbank zu speichern!


Paketbefehle

Wenn Sie ein Paket in Laravel entwickeln, möchten Sie möglicherweise Befehle einfügen. Das Registrieren von Befehlen aus Paketen ist größtenteils der gleiche Vorgang, außer dass Sie den Befehl nicht in app/start/artisan.php hinzufügen (oder nicht hinzufügen können). Stattdessen lösen Sie sie mit Artisan von Ihrem Paketdienstleister aus.

1
// path/to/your/PackageServiceProvider.php

2
3
/**

4
 * Register the service provider.

5
 *

6
 * @return void

7
 */
8
public function register()
9
{
10
    $this->app['command.package.command'] = $this->app->share(function($app)
11
    {
12
        return new PackageCommand($app['dependency']);
13
    });
14
15
    $this->commands('command.package.command');
16
}

Die commands-Methode kann eine beliebige Anzahl von Argumenten akzeptieren und löst den Befehl beim Start von Artisan aus dem Anwendungscontainer auf.


Abschluss

Wenn Sie Artisan in Laravel 4 mit seinem Gegenstück in Laravel 3 vergleichen, werden Sie schnell feststellen, dass die Verbesserungen monumental sind. Befehle können jetzt an den IoC-Container gebunden werden und die Abhängigkeitsinjektion umfassen, farbige ANSI-Ausgaben bereitstellen, Argumente und Optionen verwenden und Benutzerinteraktion anfordern.

Die Leistung von Artisan ist dank der Konsolenkomponente von Symfony unglaublich. Befehle werden eine große Rolle spielen, wenn wir vorwärts gehen - also steigen Sie früh ein!