Heim  >  Artikel  >  PHP-Framework  >  Einführung des benutzerdefinierten Make-Befehls von Laravel zum Generieren einer Service-Klasse

Einführung des benutzerdefinierten Make-Befehls von Laravel zum Generieren einer Service-Klasse

藏色散人
藏色散人nach vorne
2021-05-10 11:34:531903Durchsuche

In der folgenden Tutorial-Kolumne von laravel wird der benutzerdefinierte Make-Befehl von Laravel zum Generieren einer Service-Klasse vorgestellt. Ich hoffe, dass er Freunden in Not hilfreich sein wird!

Umgebungsbeschreibung

Die von mir verwendete Umgebung ist: Laravel Framework 8.40.0. Laravel Framework 8.40.0

C:\www\wwwroot\laravel8>php artisan --version
Laravel Framework 8.40.0

一、制作命令文件

前期知识的相关制作的教程,请参考我的另一篇博客Laravel自定义Make命令生成目标类。

  1. 运行如下命令

     php artisan make:command MakeService

    生成Console/Commands/MakeService.php命令文件。

  2. 修改继承类
    把继承类修改成GeneratorCommand,该类的命名空间为IlluminateConsoleGeneratorCommand
    删除实例化方法,handle函数
    实现一个方法getStub

  3. 设置name属性。
    修改$signature属性为name属性,并设置命令:

     protected $name = 'make:service';
  4. 设置type属性值
    type类型设置,我们生成的是service,所以我们设置的属性就是Service

     protected $type = 'Service';

    type类型是自己去定义的,本身没有特殊含义,可以不用设置。

    type属性值仅仅在创建错误的时候,给你一个友好的提示,如下所示:

     C:\www\wwwroot\laravel8>php artisan make:service TestService
     already exists!
    
     C:\www\wwwroot\laravel8>php artisan make:service TestService
     Service already exists!

    第一个是没有设置type属性的效果,第二个是设置了type属性的效果。

    官方使用的type有:Controller,Middleware,Cast,Channel…

    根据自己的需要修改其他的属性

  5. 设置Stub的位置和命令空间
    Stub的位置是在根目录下Stubs/service.stub里面。
    命名空间在app目录下Services里面。

实例代码如下:

<?php
namespace App\Console\Commands;
use Illuminate\Console\GeneratorCommand;
class MakeService extends GeneratorCommand{
    /**
     * The console command name.
     *
     * @var string
     */
    protected $name = &#39;make:service&#39;;

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = &#39;生成service对象类&#39;;

    /**
     * The type of class being generated.
     *
     * @var string
     */
    protected $type = &#39;Service&#39;;

    /**
     * Get the stub file for the generator.
     *
     * @return string
     */
    protected function getStub()
    {
        // Implement getStub() method.
        return $this->laravel->basePath('/stubs/service.stub');
    }

    /**
     * Get the default namespace for the class.
     *
     * @param  string  $rootNamespace
     * @return string
     */
    protected function getDefaultNamespace($rootNamespace)
    {
        return $rootNamespace.'\Services';
    }}

二、制作Stub文件

我的service文件目前不需要继承或者依赖什么类。所以,相对的比较简单。如果你有特别的需要,可以进行扩展操作。

实例代码如下:

<?phpnamespace DummyNamespace;class DummyClass{
    //}

DummyClassDummyNamespace在继承的GeneratorCommand类内部会被自动替换成自动生成的类名和设置的命名空间。

建议这种写法,可以使用编辑器的语法提示,获得更友好的提示效果。
另外,你也可以使用Larave内置的{{ class }}{{ namespace }}写法。

三、测试Service生成

执行以下命令

php artisan make:service IndexService

能正常生成成功

C:\www\wwwroot\laravel8>php artisan make:service IndexService
Service created successfully.

生成的文件的目录是app/Services/IndexService.php

<?php
namespace App\Services;
class IndexService{
    //}

1. Befehlsdateien erstellenTutorials zu frühen Kenntnissen finden Sie in meinem anderen Laravel-Blog „Custom Make Command to Generating Target Classes“.

Führen Sie den folgenden Befehl aus🎜rrreee🎜, um die Befehlsdatei Console/Commands/MakeService.php zu generieren. 🎜
  • 🎜Ändern Sie die geerbte Klasse
    Ändern Sie die geerbte Klasse in GeneratorCommand, und der Namespace dieser Klasse ist IlluminateConsoleGeneratorCommand.
    Löschen Sie die Instanziierungsmethode und verarbeiten Sie die Funktion.
    Implementieren Sie eine Methode getStub. 🎜
  • 🎜Legen Sie das Attribut name fest.
    Ändern Sie das Attribut $signatur in das Attribut name und legen Sie den Befehl fest: 🎜rrreee
  • 🎜Setzen Sie den Typ Attributwert<br><code>type Typeinstellung, was wir generieren, ist service, also ist das von uns festgelegte Attribut Service. 🎜rrreee🎜🎜Der Typtyp wird von Ihnen selbst definiert. Er hat keine besondere Bedeutung und muss nicht festgelegt werden. 🎜🎜🎜Der Typ-Attributwert gibt Ihnen nur eine freundliche Erinnerung, wenn Sie einen Fehler erstellen, wie unten gezeigt: 🎜rrreee🎜Der erste ist die Auswirkung, wenn das type-Attribut nicht gesetzt wird, und der zweite ist Wenn Sie es festlegen, wird die Wirkung des Attributs type geändert. 🎜🎜🎜Die offiziell verwendeten Typen sind: Controller, Middleware, Cast, Channel...🎜🎜🎜Ändern Sie andere Eigenschaften entsprechend Ihren eigenen Anforderungen🎜
  • 🎜Legen Sie den Standort und den Befehlsbereich von Stub fest
    Stub Der Speicherort befindet sich im Stammverzeichnis Stubs/service.stub.
    Der Namespace befindet sich in Services im Verzeichnis app. 🎜
  • 🎜Der Beispielcode lautet wie folgt: 🎜rrreee🎜🎜🎜 2. Erstellen Sie eine Stub-Datei🎜🎜Meine Servicedatei muss derzeit keine Klassen erben oder sich darauf verlassen. Es ist also relativ einfach. Wenn Sie besondere Bedürfnisse haben, können Sie den Vorgang verlängern. 🎜🎜Der Beispielcode lautet wie folgt: 🎜rrreee🎜🎜DummyClass und DummyNamespace werden automatisch durch automatisch generierte Klassennamen und den festzulegenden Namespace ersetzt. 🎜🎜🎜Es wird empfohlen, die Syntax-Eingabeaufforderungen des Editors zu verwenden, um einen benutzerfreundlicheren Eingabeaufforderungseffekt zu erzielen.
    Darüber hinaus können Sie auch die integrierten {{ class }}- und {{ namespace }}-Schreibvorgänge von Larave verwenden Methoden. 🎜🎜🎜🎜3. Testen Sie die Dienstgenerierung. Führen Sie den folgenden Befehl aus Die generierte Datei lautet wie folgt: 🎜rrreee🎜🎜Verwandte Empfehlungen: 🎜Die neuesten fünf Laravel-Video-Tutorials🎜🎜🎜

    Das obige ist der detaillierte Inhalt vonEinführung des benutzerdefinierten Make-Befehls von Laravel zum Generieren einer Service-Klasse. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Dieser Artikel ist reproduziert unter:learnku.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen