使用 make:service 命令快速生成 Services

laradocs發表於2021-11-11

前言

Artisan 是 Laravel 附帶的命令列介面。Artisan 以 artisan 指令碼的形式存在於應用的根目錄,並提供了許多有用的命令,這些命令可以在構建應用時為你提供幫助。

除 Artisan 提供的命令外,你也可以編寫自己的自定義命令。 命令在多數情況下位於 app/Console/Commands 目錄中; 不過,只要你的命令可以由 Composer 載入,你就可以自由選擇自己的儲存位置。

前期工作

在開始之前,我們要準備相應的目錄和檔案。

我們可以使用以下命令快速生成 ServiceMakeCommand.php 檔案:

php artisan make:command ServiceMakeCommand

執行完後會在你的 Console 資料夾下生成 Commands 資料夾和 Commands/ServiceMakeCommand.php 檔案。

我們還需要在 Commands 資料夾下新增一些資料夾和檔案:

結構如下:

- app
    - Console
+   - Commands
+       - stubs
+           - service.plain.stub
+       - ServiceMakeCommand.php
        - Kernel.php
- .
- .
- .

service.plain.stub 程式碼:

app/Console/Commands/stubs/service.plain.stub

<?php

namespace {{ namespace }};

class {{ class }}
{
    //
}

我們的前期準備就此結束,是不是很簡單?哈哈。

快速開始

接下來我們就直接一把梭哈了,注意改動的程式碼噢。

我們主要是對著 ServiceMakeCommand.php 檔案一把梭哈,所以:

app/Console/Commands/ServiceMakeCommand.php

<?php

namespace App\Console\Commands;

use Illuminate\Console\GeneratorCommand;

class ServiceMakeCommand extends GeneratorCommand
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'make:service {name}';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Create a new controller class';

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

    /**
     * Get the stub file for the generator.
     *
     * @return string
     */
    protected function getStub()
    {
        return __DIR__ . '/stubs/service.plain.stub';
    }

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

最後,我們執行以下命令快速生成 UserService.php 檔案:

php artisan make:service UserService

結構如下:

- app
    - Console
        - Commands
        - stubs
        - service.plain.stub
        - ServiceMakeCommand.php
        - Kernel.php
+   - Services
+       - UserService.php
- .
- .
- .

讓我們檢視 UserService.php 和我們想象中的程式碼是否一致:

app/Services/UserService.php

<?php

namespace App\Services;

class UserService
{
    //
}

恭喜?,我們已經做到我們想要的結果了。

總結

雖然我們做得比較簡陋,但我們只需稍加改進,就可以讓它變得更完善。

本作品採用《CC 協議》,轉載必須註明作者和本文連結
站在巨人的肩上。

相關文章