W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
使用 CLI 命令和使用路由等其他模塊一樣的輕松愉快,也有一些不同的地方,這就是 CLI 命令的由來。CLI 命令是不需要為其定義路由的簡單類,可以讓開發(fā)人員更簡單的創(chuàng)建一些工具。例如,數(shù)據(jù)庫遷移、數(shù)據(jù)庫填充、檢查計(jì)劃任務(wù)(cronjob)狀態(tài),甚至為公司做一個(gè)自定義代碼生成器。
命令是在項(xiàng)目根目錄中通過命令行來執(zhí)行的。在 /app 和 /system 同級(jí)目錄中,提供了一個(gè)自定義腳本 spark 用于運(yùn)行任何 CLI 命令:
> php spark
在不指定命令名稱的情況下調(diào)用命令,會(huì)顯示幫助頁面并展示出所有可用的命令。你應(yīng)該將命令名稱作為運(yùn)行該命令的第一個(gè)參數(shù)傳遞:
> php spark migrate
一些命令需要使用到更多的參數(shù),你需要直接寫在后面并以空格分隔開:
> php spark db:seed DevUserSeeder
對(duì)于 CodeIgniter 提供的命令,如果不提供必需的參數(shù),則將提示你輸入正確運(yùn)行所需的參數(shù):
> php spark migrate:version
> Version?
你可以使用 help 命令來獲得 CLI 幫助:
> php spark help db:seed
你可以非常容易的創(chuàng)建新的命令,并在開發(fā)中使用。每個(gè)類都必須獨(dú)立成一個(gè)文件,且必須繼承自 CodeIgniter\CLI\BaseCommand
,同時(shí)需要實(shí)現(xiàn) run()
方法。
為了在 CLI 命令中列出你的命令并添加相應(yīng)幫助功能,需要使用到以下屬性:
幫助描述將根據(jù)以上參數(shù)自動(dòng)生成。
命令必須放在名為 Commands 的目錄中。但是,該目錄可以位于 自動(dòng)加載器 可以找到的任何位置。該目錄可以在 /app/Commands 中,或者一個(gè)你用來放置所有命令的目錄,例如 Acme/Commands 。
注解
執(zhí)行命令時(shí),將加載完整的 CodeIgniter CLI 環(huán)境,從而可以獲取環(huán)境信息,路徑信息以及編寫控制器時(shí)所用到的任何工具。
讓我們逐步通過一個(gè)示例命令來演示,這個(gè)命令的功能是報(bào)告關(guān)于應(yīng)用程序自身的一些基本信息。首先創(chuàng)建一個(gè) /app/Commands/AppInfo.php 文件,代碼如下:
<?php namespace App\Commands;
use CodeIgniter\CLI\BaseCommand;
use CodeIgniter\CLI\CLI;
class AppInfo extends BaseCommand
{
protected $group = 'demo';
protected $name = 'app:info';
protected $description = '顯示基本應(yīng)用信息';
public function run(array $params)
{
}
}
如果運(yùn)行 list 命令,你將在其自己的 demo
組下看到新命令。如果你仔細(xì)觀察,就會(huì)很容易的發(fā)現(xiàn)它們是如何工作的。$group
屬性說明他所在的組,及存在的所有命令,并會(huì)指出他在哪個(gè)列表之下。
$name
屬性是命令用來被調(diào)用的名字,僅有的要求是不能包含空格,并且所有字符必須是命令行有效字符。按照慣例命令行都是小寫,通過使用命名空間的冒號(hào),可以規(guī)避掉重名的風(fēng)險(xiǎn)。
最后一個(gè)屬性 $description
是在 list 命令中顯示的一條描述信息,用來描述命令的用途。
run()
方法在命令運(yùn)行時(shí)會(huì)被調(diào)用,$params
數(shù)組是緊跟在命令名之后的 CLI 參數(shù)列表,例如下面的 CLI 內(nèi)容:
> php spark foo bar baz
foo 是命令名稱,$params
數(shù)組將是:
$params = ['bar', 'baz'];
This can also be accessed through the CLI library, but this already has your command removed from the string. These parameters can be used to customize how your scripts behave.
在我們的 demo 命令中,run
方法類似如下寫法:
public function run(array $params)
{
CLI::write('PHP Version: '. CLI::color(phpversion(), 'yellow'));
CLI::write('CI Version: '. CLI::color(CodeIgniter::CI_VERSION, 'yellow'));
CLI::write('APPPATH: '. CLI::color(APPPATH, 'yellow'));
CLI::write('SYSTEMPATH: '. CLI::color(SYSTEMPATH, 'yellow'));
CLI::write('ROOTPATH: '. CLI::color(ROOTPATH, 'yellow'));
CLI::write('Included files: '. CLI::color(count(get_included_files()), 'yellow'));
}
所有命令必須繼承自 BaseCommand
類,它擁有一些很有用的方法,在創(chuàng)建自己的命令時(shí)應(yīng)熟悉這些方法。在 $this->logger 上也有一個(gè) Logger 。
CodeIgniter\CLI\BaseCommand
call
(*string $command[, array $params=[]*])
參數(shù): | $command (string) – 要調(diào)用的另一個(gè)命令的名稱。 |
---|---|
$params (array) – 使該命令可用的附加 CLI 參數(shù)。 |
此方法使你可以在當(dāng)前命令執(zhí)行期間運(yùn)行其他命令:
$this->call('command_one');
$this->call('command_two', $params);
showError
(Exception $e)
參數(shù): | $e (Exception) – 用于錯(cuò)誤報(bào)告的 Exception。 |
---|---|
一種方便的方法,用于向 CLI 保持一致且清晰的錯(cuò)誤輸出:
try
{
. . .
}
catch (\Exception $e)
{
$this->showError($e);
}
showHelp
()
顯示命令幫助的方法:(用法,參數(shù),描述,選項(xiàng))
getPad
($array, $pad)
參數(shù): | $array (array) – $key => $value 數(shù)組 |
---|---|
$pad (integer) – 填充空格數(shù) |
一個(gè)為 $key => $value 數(shù)組輸出計(jì)算填充的方法。填充可用于在 CLI 中輸出格式化的表格:
$pad = $this->getPad($this->options, 6);
foreach ($this->options as $option => $description)
{
CLI::write($tab . CLI::color(str_pad($option, $pad), 'green') . $description, 'yellow');
}
// 輸出應(yīng)該會(huì)像這樣
-n 設(shè)置遷移命名空間
-r 覆蓋文件
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: