Laravel command ? 會如何使用它??怎麼自建一個自己的php artisan??

這篇文章主要帶大家能夠在命令列中使用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的語系們。