Laravel 5.1框架中如何建立自訂Artisan控制台命令
對於laravel初學者來說,對laravel創建自訂Artisan控制台命令可能是不太了解,接下來的這篇文章給大家分享一下laravel框架中創建自訂Artisan控制台命令的實例。
1、入門
Laravel透過Artisan提供了強大的控制台命令來處理非瀏覽器業務邏輯。要查看Laravel中所有的Artisan命令,可以透過在專案根目錄運行:
php artisan list
對應輸出如下(部分截圖):
其中一些命名我們已經比較熟悉了,例如創建遷移make:migration以及執行遷移migrate,又例如創建模型make:model,創建控制器make:controller等。
如果要查看具體某個命令的使用方法,例如我們要查看創建Artisan命令make:console的具體用法,可以使用如下命令:
php artisan help make:console
對應輸出如下:
2、建立指令
Artisan除了提供豐富的控制台指令之外,還允許我們透過make:console指令建立自己的控制台命令。上面我們已經使用help指令查看了make:console的用法,下面我們就沿著這條路走下去,一探究竟:建立指令並運行起來得到我們想要的各種結果。
首先我們建立一個最簡單的指令,印出Hello LaravelAcademy,使用Artisan指令如下:
php artisan make:console HelloLaravelAcademy --command=laravel:academy
其中HelloLaravelAcademy是指令名,laravel:academy是控制台執行的指令,類似make: console。
執行完成後,會在app/Console/Commands目錄下產生一個HelloLaravelAcademy.php檔案:
<?php namespace App\Console\Commands; use Illuminate\Console\Command; class HelloLaravelAcademy extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = 'laravel:academy'; /** * The console command description. * * @var string */ protected $description = 'Command description.'; /** * Create a new command instance. * * @return void */ public function __construct() { parent::__construct(); } /** * Execute the console command. * * @return mixed */ public function handle() { // } }
其中$signature即為在控制台執行的指令名,$description為指令描述,handle方法為執行指令時所呼叫的方法。
接下來我們簡單寫handle方法如下:
public function handle() { echo "Hello LaravelAcademy\n"; }
好了,一個最簡單的命令已經編寫好了,接下來要怎麼執行並在控制台打印出“Hello LaravelAcademy”呢?
3、執行指令
在執行指令前需要將其註冊到App\Console\Kernel的$commands屬性中:
protected $commands = [ ... //其他命令类 \App\Console\Commands\HelloLaravelAcademy::class ];
接下來我們就可以在控制台運行如下Artisan命令:
php artisan laravel:academy
終端就會印出:
Hello LaravelAcademy
是不是很簡單?
4、更多樣的輸入輸出
當然,上面是最簡單的情形,沒有輸入,寫死的輸出。實際環境中有更複雜的需求,有更多樣的輸入輸出,下面我們來一一討論。
定義輸入
上面已經提到,我們可以透過修改$signature屬性定義輸入參數及選項,例如這裡我們將上述Hello後面的字串調整為透過輸入參數來控制,可修改$signature如下:
protected $signature = 'laravel:academy {name}';
這樣定義意味著name是必選參數,當然也支援更多自訂參數輸入:
{name?} //可选参数 {name=LaravelAcademy} //默认name值为LaravelAcademy
為增強程式健壯性,我們將name修改為有預設值:
protected $signature = 'laravel:academy {name=LaravelAcademy}';
有時候我們還會在執行指令時傳入一些選項,例如是否顯示標點符號(雖然聽上去很雞肋,這裡權當測試之用), 那我們可以修改$signature屬性如下:
protected $signature = 'laravel:academy {name=LaravelAcademy} {--mark}';
如果呼叫指令時傳遞--mark則代表其值為true,否則為false,如果選項值在輸入時透過使用者設置,可定義$ signature如下:
protected $signature = 'laravel:academy {name=LaravelAcademy} {--mark=}';
這樣使用者就可以在傳入選項時透過=來為選項賦值,當然和參數一樣,我們也可以為選項指定預設值:
protected $signature = 'laravel:academy {name=LaravelAcademy} {--mark=!}';
#取得輸入
定義好輸入參數與選項後,又該如何取得對應值? Laravel為我們提供了相應的方法。
取得參數值可以透過Illuminate\Console\Command的argument方法:
$name = $this->argument('name');
如果無參考呼叫argument方法,則傳回的是所有參數值陣列。
取得選項值可以透過Illuminate\Console\Command的option方法:
$mark = $this->option('mark');
同理,無參考呼叫option方法會傳回所有選項值陣列。
這樣我們可以修改HelloLaravelAcademy的handle方法如下:
public function handle() { $name = $this->argument('name'); $mark = $this->option('mark'); $string = 'Hello '.$name; if($mark) $string .= $mark; echo $string."\n"; }
這樣我們在控制台輸入如下Artisan指令:
php artisan laravel:academy
對應輸出為:
Hello LaravelAcademy!
再運行如下Artisan指令:
php artisan laravel:academy Laravel --mark=?
對應輸出為:
Hello Laravel?
#輸入提示
我們甚至可以完全讓使用者通過在控制台輸入name來取得輸入參數,先修改handle方法如下:
public function handle() { $name = $this->ask('What do you want to say Hello?'); echo "Hello ".$name."\n"; }
然後在終端機輸入php artisan laravel:academy,互動頁面如下:
如果是輸入密碼一類的敏感資訊可以用secret取代ask方法。
有時候我們會依照使用者的意願選擇繼續或中止:
public function handle() { if($this->confirm('Do you want to continue?[y|n]')){ $this->info("Continue"); }else{ $this->error("Interrupt"); } }
對應輸出為:
除了让用户手动输入外,还可以使用anticipate方法实现自动完成功能:
public function handle() { $name = $this->anticipate('What is your name?', ['Laravel', 'Academy']); $this->info($name); }
当然还可以使用choice方法为用户提供选择避免手动输入,用户只需选择对应索引即可:
public function handle() { $name = $this->choice('What is your name?', ['Laravel', 'Academy']); $this->info($name); }
对应交互页面如下:
编写输出
关于输出字符串,上面我们简单使用了echo语句,其实Laravel提供了更为强大和多样化的方法:
public function handle() { $this->info("Successful!"); $this->error("Something Error!"); $this->question("What do you want to do?"); $this->comment("Just Comment it!"); }
执行php artisan laravel:academy对应输出如下:
表格
Artisan甚至可以输出表格:
public function handle() { $headers = ['Name', 'Email']; $users = \App\User::all(['name', 'email'])->toArray(); $this->table($headers, $users); }
执行php artisan laravel:academy对应输出为:
进度条
当然对于复杂耗时的命令,进度条是必不可少的,
public function handle() { $this->output->progressStart(10); for ($i = 0; $i < 10; $i++) { sleep(1); $this->output->progressAdvance(); } $this->output->progressFinish(); }
执行php artisan laravel:academy对应输出为:
5、从CLI之外调用Artisan
除了在控制台执行Artisan命令之外,还可以通过代码在别处调用Artisan命令,比如其它Artisan命令、控制器、路由或其他。
路由
在路由闭包中我们可以通过Artisan门面的call方法来调用本节创建的命令:
//在路由中调用Artisan命令 Route::get('testArtisan',function(){ $exitCode = Artisan::call('laravel:academy', [ 'name' => 'Laravel学院', '--mark' => '!' ]); });
其它Artisan命令
在一个Artisan命令中也可以调用另一个Artisan命令,还是通过call方法:
public function handle() { $this->call('inspire'); }
如果想要调用一个Artisan命令并阻止其所有输出,可以使用callSilent方法:
public function handle() { $this->callSilent('inspire'); }
除此之外,关于Artisan命令你还应该知道的是我们可以在创建的命令类的控制器或方法中注入任何依赖。这就意味着我们可以在命令类中使用注册到服务容器的所有类。
相关推荐:
Laravel框架内置的Broadcast功能如何实现与客户端实时通信
以上是Laravel 5.1框架中如何建立自訂Artisan控制台命令的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Laravel 是一款 PHP 框架,用於輕鬆構建 Web 應用程序。它提供一系列強大的功能,包括:安裝: 使用 Composer 全局安裝 Laravel CLI,並在項目目錄中創建應用程序。路由: 在 routes/web.php 中定義 URL 和處理函數之間的關係。視圖: 在 resources/views 中創建視圖以呈現應用程序的界面。數據庫集成: 提供與 MySQL 等數據庫的開箱即用集成,並使用遷移來創建和修改表。模型和控制器: 模型表示數據庫實體,控制器處理 HTTP 請求。

Django和Laravel都是全棧框架,Django適合Python開發者和復雜業務邏輯,Laravel適合PHP開發者和優雅語法。 1.Django基於Python,遵循“電池齊全”哲學,適合快速開發和高並發。 2.Laravel基於PHP,強調開發者體驗,適合小型到中型項目。

Laravel是如何在後端邏輯中發揮作用的?它通過路由系統、EloquentORM、認證與授權、事件與監聽器以及性能優化來簡化和增強後端開發。 1.路由系統允許定義URL結構和請求處理邏輯。 2.EloquentORM簡化數據庫交互。 3.認證與授權系統便於用戶管理。 4.事件與監聽器實現松耦合代碼結構。 5.性能優化通過緩存和隊列提高應用效率。

Laravel 提供了一個全面的 Auth 框架,用於實現用戶登錄功能,包括:定義用戶模型(Eloquent 模型)創建登錄表單(Blade 模板引擎)編寫登錄控制器(繼承 Auth\LoginController)驗證登錄請求(Auth::attempt)登錄成功後重定向(redirect)考慮安全因素:哈希密碼、防 CSRF 保護、速率限制和安全標頭。此外,Auth 框架還提供重置密碼、註冊和驗證電子郵件等功能。詳情請參閱 Laravel 文檔:https://laravel.com/doc

想要學習 Laravel 框架,但苦於沒有資源或經濟壓力?本文為你提供了免費學習 Laravel 的途徑,教你如何利用網絡平台、文檔和社區論壇等資源,從入門到掌握,為你的 PHP 開發之旅奠定堅實基礎。

想要學習 Laravel 6 實戰,可從 Laracasts(推薦)、官方文檔和 YouTube 獲取視頻教程。推薦課程包括 Laracasts 的“Laravel 6 從入門到精通”和官方團隊製作的“Official Laravel 6 Tutorial”。在選擇視頻課程時,要考慮技能水平、授課風格、項目經驗和更新頻率。

在這個技術不斷進步的時代,掌握先進的框架對於現代程序員至關重要。本文將通過分享 Laravel 框架中鮮為人知的技巧,幫助你提升開發技能。 Laravel 以其優雅的語法和廣泛的功能而聞名,本文將深入探討其強大的特性,提供實用技巧和竅門,幫助你打造高效且維護性高的 Web 應用程序。

文章摘要:本文提供了詳細分步說明,指導讀者如何輕鬆安裝 Laravel 框架。 Laravel 是一個功能強大的 PHP 框架,它 упростил 和加快了 web 應用程序的開發過程。本教程涵蓋了從系統要求到配置數據庫和設置路由等各個方面的安裝過程。通過遵循這些步驟,讀者可以快速高效地為他們的 Laravel 項目打下堅實的基礎。
