這篇文章主要帶大家能夠在命令列中使用laravel 的程式,過程中我們將對artisan有初步的認識,並且在命令列建立與使用自己定義的程式。
什麼是artisan?
在使用laravel時,我們常常會使用指令php artisan ,這個意思其實是我們使用php去使用artisan 這個檔案。
如果我們打開我們的laravel專案資料夾中,就可以發現有一個檔案叫做artisan。
點開artisan後,會發現其實artisan也是由php所寫的,它的運作方式大概是啟動核心handle輸入和輸出,但這篇文章本上會先以實際使用為主,有興趣可以去找找laravel 原始碼。
如何知道Laravel有甚麼指令可以使用?
我們可以在編譯器中輸入php artisan list來查詢:
PS C:\Users\Desktop\blog02> php artisan list
Laravel Framework 9.27.0
Usage:
command [options] [arguments]
Options:
-h, --help Display help for the given command. When no command is given display help for the list command
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi|--no-ansi Force (or disable --no-ansi) ANSI output
-n, --no-interaction Do not ask any interactive question
--env[=ENV] The environment the command should run under
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
Available commands:
MakeJson Command description
about Display basic information about your application
clear-compiled Remove the compiled class file
completion Dump the shell completion script
db Start a new database CLI session
docs Access the Laravel documentation
down Put the application into maintenance / demo mode
env Display the current framework environment
help Display help for a command
inspire Display an inspiring quote
list List commands
migrate Run the database migrations
optimize Cache the framework bootstrap files
serve Serve the application on the PHP development server
test Run the application tests
tinker Interact with your application
up Bring the application out of maintenance mode
auth
auth:clear-resets Flush expired password reset tokens
cache
cache:clear Flush the application cache
cache:forget Remove an item from the cache
cache:table Create a migration for the cache database table
config
config:cache Create a cache file for faster configuration loading
config:clear Remove the configuration cache file
db
db:monitor Monitor the number of connections on the specified database
db:seed Seed the database with records
db:show Display information about the given database
db:table Display information about the given database table
db:wipe Drop all tables, views, and types
event
event:cache Discover and cache the application's events and listeners
event:clear Clear all cached events and listeners
event:generate Generate the missing events and listeners based on registration
event:list List the application's events and listeners
key
key:generate Set the application key
make
make:cast Create a new custom Eloquent cast class
make:channel Create a new channel class
make:command Create a new Artisan command
其中就會發現,我們會得到滿滿一串的指令(擷取一半),而其中也會發現有我們常用make、migrate、cache...等。
BTW:建立一個lavarel是輸入lavarel new filename
怎麼產生一個新的指令?
這裡我們要開始學習使用command這個功能了,首先我們要執行指令:php artisan make:command Test01
php artisan make:command test01
>>>INFO Console command created successfully.
之後你就能夠在app\Console\Command裡面找到剛剛創建的test01,當然,你可以換一個自己喜歡的名字。
建好檔案後,怎麼寫裡面的功能?
首先我們可以打開剛剛建立好的文件,他會長這個樣子:
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class test01 extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'command:name';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Command description';
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
return 0;
}
}
你會發現這一段:class test01 extends Command ,代表test01繼承了command。
再往下看會發現protected $signature = 'command:name';,這個就是$signature就代表我們在命令列中輸入php artisan []時,[]中所放的名稱。
這裡我將它改為:
protected $signature = 'try01';
再往下第二段的protected $description = 'Command description'; 則是功能說明,.會出現在php artisan list之中。
第三段的public function handle()是我們的主程式,在其中可以中加入我要執行的命令:
public function handle()
{
$i=10;
while(--$i)
print("$i ");
return 0;
}
執行:
php artisan try01
>>>9 8 7 6 5 4 3 2 1
這樣就完成囉~
但我相信你你們有發現一個剛開始有點怪怪的地方對吧
為甚麼一開始$signature預設是command:name?中間怎麼有冒號?
剛剛我們再呼叫時,並不需要給予這隻程式一個參數,但如果需要給予參數的話,可以這麼寫
首先,先改寫我們的$signature
protected $signature = 'try01:number {num}';
再改寫我們的handle
public function handle()
{
$num=$this->argument('num');
while(--$num)
print("$num ");
return 0;
}
最後在終端機上實做:
php artisan try01:number 20
19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
完成囉~我們在這篇實作了自訂的命令,使我們可以直接在終端機使用laravel的程式,也了解artisan的語系們。