下面由laravel教學欄位介紹Laravel自訂Make指令產生Service類,希望對需要的朋友有幫助!
一樣我所使用的環境為:Laravel Framework 8.40.0
#為我所使用的環境為:
C:\www\wwwroot\laravel8>php artisan --version Laravel Framework 8.40.0
一、製作指令檔
執行以下指令<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"> php artisan make:command MakeService</pre><div class="contentsignin">登入後複製</div></div>
產生
修改繼承類別
將繼承類別修改成GeneratorCommand
,該類別的命名空間為
Illuminate\Console\GeneratorCommand
。 刪除實例化方法,handle函數
實作一個方法
設定
name屬性。
修改$signature
屬性為
protected $name = 'make:service';
設定
type屬性值
type
類型設置,我們產生的是service
#,所以我們設定的屬性就是
。type類型是自己去定義的,本身沒有特殊意義,可以不用設定。protected $type = 'Service';登入後複製
type屬性值只是在創建錯誤的時候,給你一個友善的提示,如下所示:<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"> C:\www\wwwroot\laravel8>php artisan make:service TestService
already exists!
C:\www\wwwroot\laravel8>php artisan make:service TestService
Service already exists!</pre><div class="contentsignin">登入後複製</div></div>
第一個是沒有設定type
#屬性的效果,第二個是設定了
屬性的效果。官方使用的type有:Controller,Middleware,Cast,Channel…
設定Stub的位置和指令空間
Stub的位置是在根目錄下
Stubs/service.stub裡面。
命名空間在app
目錄下
<?php namespace App\Console\Commands; use Illuminate\Console\GeneratorCommand; class MakeService extends GeneratorCommand{ /** * The console command name. * * @var string */ protected $name = 'make:service'; /** * The console command description. * * @var string */ protected $description = '生成service对象类'; /** * The type of class being generated. * * @var string */ protected $type = 'Service'; /** * 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{ //}登入後複製DummyClass
和DummyNamespace
在繼承的GeneratorCommand
建議這種寫法,可以使用編輯器的語法提示,以獲得更友善的提示效果。
另外,你也可以使用Larave
內建的{{ class }}
和
三、測試Service產生
執行以下指令
php artisan make:service IndexService
能正常產生成功 以上是介紹Laravel自訂Make指令產生Service類的詳細內容。更多資訊請關注PHP中文網其他相關文章!C:\www\wwwroot\laravel8>php artisan make:service IndexService
Service created successfully.
,產生的檔案如下:
###### #<?php
namespace App\Services;
class IndexService{
//}