久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

一起聊聊Laravel運行命令行腳本

本篇文章給大家?guī)砹岁P(guān)于Laravel的相關(guān)知識,其中主要介紹了運行命令行腳本的相關(guān)問題,Laravel 中有個專門單獨的目錄,也就是 Console 目錄,它是用于存放腳本文件的。下面一起來看一下,希望對大家有幫助。

一起聊聊Laravel運行命令行腳本

推薦學(xué)習(xí):Laravel入門

我們看到了 Laravel 中有個專門單獨的目錄,也就是 Console 目錄,它是用于存放腳本文件的。這個腳本文件一般指的就是我們通過 php 命令來執(zhí)行的命令行腳本,在許多框架中都有這樣的功能。對于現(xiàn)代化的應(yīng)用開發(fā)來說,一些數(shù)據(jù)統(tǒng)計、數(shù)據(jù)導(dǎo)出、隊列處理等比較耗時的功能,以及一些自動化的后端運行程序,都需要使用這種命令行腳本來執(zhí)行。

默認提供的腳本

在當(dāng)前的框架目錄中,我們在根目錄執(zhí)行 php artisan ,就可以看到命令行的幫助信息,這里就列出了所有已經(jīng)存在的命令行腳本。第一篇文章中,我們就接觸過這其中的兩個命令。

# php artisan key:generate # php artisan serve

它們的作用一個是生成一個加密緩存等需要使用的唯一 Key ,另一個是運行一個自帶的簡易服務(wù)器。從腳本名稱中我們可以看出,腳本可以以一個 : 分隔,冒號前面是大的分類,比如有 cache:xxx 相關(guān)的,也有 make:xxx 相關(guān)的。cache 相關(guān)的就是處理一些緩存信息的,而 make 相關(guān)的則是創(chuàng)建一些我們需要的文件,比如創(chuàng)建一個控制器可以使用 make:controller ,創(chuàng)建一個數(shù)據(jù)模型可以使用 make:model 。

關(guān)于這些默認自帶的腳本,我們將在學(xué)習(xí)到相關(guān)內(nèi)容的時候順帶著一起學(xué)習(xí)。

自定義一個腳本

自定義一個腳本非常簡單。我們可以使用 make:command 命令來生成一個命令行腳本。

# php artisan make:command test1 Console command created successfully.

這時,在 app/Console/Commands 目錄下就會出現(xiàn)一個 test1.php 文件。打開這個文件,我們需要做一些修改。

/**  * The name and signature of the console command.  *  * @var string  */ protected $signature = 'command:name'; /**  * The console command description.  *  * @var string  */ protected $description = 'Command description';

signature 用于設(shè)定當(dāng)前這個腳本的名稱,description 用于定義腳本的注釋說明。它們用在什么地方呢?其實 signature 就是我們通過 php artisan 來運行這個腳本時所需要用到的那個名稱。比如我們現(xiàn)在直接執(zhí)行 php artisan 的話,就會看到下面這樣一條可執(zhí)行命令行腳本的出現(xiàn)。

 command   command:name         Command description

當(dāng)然,使用這個默認的名稱并不是好的主意,所以我們可以修改一下這兩個屬性。

/**  * The name and signature of the console command.  *  * @var string  */ protected $signature = 'ZyBlog:Test1'; /**  * The console command description.  *  * @var string  */ protected $description = '硬核測試1';

這個時候我們再運行 php artisan 的話,就可以看到我們定義的信息了。

 ZyBlog   ZyBlog:Test1         硬核測試1

如果要運行這個腳本也非常簡單。

# php artisan ZyBlog:Test1

當(dāng)然,我們還什么都沒做呢,所以不會有什么輸出。接下來我們把接收參數(shù)和輸出信息一起做了。接收參數(shù)需要在 signature 中定義我們要接收的參數(shù)及選項。還記得我們之前講過的在 PHP 中如何接收腳本參數(shù)及選項信息的文章嗎?Laravel 已經(jīng)將這些封裝好了,不需要再去使用那些函數(shù)來進行接收處理,直接使用就可以了。需要復(fù)習(xí)的同學(xué)可以移步 【如何獲取PHP命令行參數(shù)】mp.weixin.qq.com/s/dFuGaM1JT… 進行復(fù)習(xí)或?qū)W習(xí)。

protected $signature = 'ZyBlog:Test1 {a=1} {--b=*}'; /**  * Execute the console command.  *  * @return int  */ public function handle() {     echo "歡迎進來測試!", PHP_EOL;     print_r($this->arguments());     // Array     // (     //     [command] => ZyBlog:Test1     //     [a] => 1     // )     print_r($this->options());     // Array     // (     //     [b] => Array     //         (     //             [0] => 2     //         )          //     [help] =>      //     [quiet] =>      //     [verbose] =>      //     [version] =>      //     [ansi] =>      //     [no-ansi] =>      //     [no-interaction] =>      //     [env] =>      // )     echo $this->argument('a'); // 1     print_r($this->option('b'));     // Array     // (     //     [0] => 2     // )     return 0; }

在 handle() 函數(shù)中,我們可以編寫當(dāng)前這個腳本需要執(zhí)行的功能代碼。其中,通過 arguments() 和 argument() 可以接收到腳本的參數(shù)信息,通過 options() 和 option() 可以接收到腳本的選項信息。關(guān)于參數(shù)和選項的問題,之前的文章中我們也講解過了,這里也就不多說了,一切都是以基礎(chǔ)為準(zhǔn)的。

參數(shù)選項源碼分析

對于參數(shù)和選項來說,Laravel 的底層調(diào)用的其實是 symfony 的 Console 組件,在 symfony/console/Input/ArgvInput.php 中,我們可以看到下面這些代碼。

public function __construct(array $argv = null, InputDefinition $definition = null) {     $argv = $argv ?? $_SERVER['argv'] ?? [];     // strip the application name     array_shift($argv);     $this->tokens = $argv;     parent::__construct($definition); } // …………………… // …………………… protected function parse() {     $parseOptions = true;     $this->parsed = $this->tokens;     while (null !== $token = array_shift($this->parsed)) {         if ($parseOptions && '' == $token) {             $this->parseArgument($token);         } elseif ($parseOptions && '--' == $token) {             $parseOptions = false;         } elseif ($parseOptions && 0 === strpos($token, '--')) {             $this->parseLongOption($token);         } elseif ($parseOptions && '-' === $token[0] && '-' !== $token) {             $this->parseShortOption($token);         } else {             $this->parseArgument($token);         }     } }

很明顯,在 symfony 中,也是使用的 argv 獲取參數(shù)和選項,然后將它們放到 input 變量中向下傳遞。這個 input 變量很重要,后面我們在學(xué)習(xí)請求相關(guān)的內(nèi)容時也會接觸到。之后在我們的執(zhí)行代碼中,也就是 Command 的 handle() 方法中使用 argument() 或者 option() 獲取到的就是這個 input 中的數(shù)據(jù)。從斷點調(diào)試中我們就可以看到它們的身影。

一起聊聊Laravel運行命令行腳本

那么 Laravel 是如何執(zhí)行 handle() 函數(shù)的呢?首先通過 artisan 文件調(diào)用到 laravel/framework/src/Illuminate/Foundation/Console/Kernel.php 文件,在這個 Kernel.php 中的 handle() 方法中會調(diào)用 symfony/console/Application.php ,接著進入 laravel/framework/src/Illuminate/Console/Command.php 中執(zhí)行 execute() 方法,通過回調(diào)的方式調(diào)用我們自定義的那個 handle() 方法。

注意,在 laravel/framework/src/Illuminate/Console/Command.php 的底層還是調(diào)用的 symfony 下面的 console/command.php 里面的方法。

整個調(diào)用鏈條非常長,不過也可以清晰地看出我們的 Laravel 確實就是在 Symfony 的基礎(chǔ)上又套了層殼。而且不僅僅是命令行這里,在 Web 請求這一塊,依然底層還是 Symfony 在發(fā)揮著至關(guān)重要的作用。

推薦學(xué)習(xí):Laravel視頻教程

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
日韩一区二区三区四区五区| 亚洲毛片在线免费| 蜜臀久久99精品久久一区二区 | 一区二区精品伦理...| 日本一区福利在线| 青青草91视频| 六月丁香综合在线视频| 成人污污视频| 国产一区二区三区四区| 欧美激情在线精品一区二区三区| 日韩一二三区在线观看| 影音先锋久久| 综合五月婷婷| 国产精品成人国产| 国产高清一区二区| 国产亚洲久久| 四虎国产精品免费观看| 激情久久久久久| 亚洲91在线| 国产成人精品三级高清久久91| 欧美美女一区| 日韩精品福利一区二区三区| 欧美丰满日韩| 亚洲最大av| av中文资源在线资源免费观看| 日本久久精品| 国产精品视频一区视频二区| 日韩大片在线| 国产日韩在线观看视频| 久久精品亚洲人成影院| 亚洲免费观看高清完整版在线观| 久久国产日本精品| 亚洲免费专区| 日韩精品一级中文字幕精品视频免费观看 | 美女毛片一区二区三区四区最新中文字幕亚洲 | 国产在线观看www| 一区在线免费| 欧美aⅴ一区二区三区视频| 91国语精品自产拍| 国产精品大片| 亚洲精品综合| 国语精品一区| 午夜久久av | 亚洲精品动态| 成人在线观看免费视频| 黄色成人91| 亚洲伊人av| 国产日韩在线观看视频| 亚洲免费影院| 中文字幕在线看片| 日本一区二区三区中文字幕| 精品视频在线观看网站| 欧美日韩国产一区精品一区| 国产精品a久久久久| 日本欧美一区| 亚洲深夜福利| 日韩欧美另类一区二区| 免费在线播放第一区高清av| 国产欧美大片| 日韩高清二区| 日本va欧美va精品发布| 久久性天堂网| 亚洲精品一区二区妖精| 亚洲国内精品| 亚洲午夜91| www在线观看黄色| 亚洲尤物在线| 日韩中文字幕亚洲一区二区va在线| 四虎884aa成人精品最新| 青青伊人久久| 国产精品啊啊啊| 精品国产欧美日韩一区二区三区| 国产麻豆精品久久| 久久av国产紧身裤| 日韩在线成人| 国产日韩三级| 国产精品magnet| 日韩av自拍| 日韩欧美在线中字| 欧美aa一级| 激情综合网址| 天堂√8在线中文| av资源亚洲| 久久精品二区三区| 9国产精品视频| 婷婷综合一区| 久久av国产紧身裤| 亚洲天堂一区二区| 热久久免费视频| 免费在线观看一区| 色婷婷色综合| 午夜日韩福利| 国产亚洲第一伦理第一区| 国产黄色一区| 亚洲二区在线| 日韩欧美中文在线观看| 日韩欧美中文在线观看| 美女网站视频一区| 日本一区二区中文字幕| 日本在线高清| 亚洲影视一区二区三区| 福利一区和二区| 日韩精品一区二区三区中文在线| 国产精品久久久久久久久久妞妞| 蜜臀国产一区| 水蜜桃久久夜色精品一区的特点| 久久精品国产福利| 蜜桃av一区| 三级小说欧洲区亚洲区| 国产日韩欧美高清免费| 中文字幕在线官网| 久久人人99| 久久狠狠久久| 99在线精品视频在线观看| 成人免费一区| 国产欧美一级| 中文字幕亚洲精品乱码| 色吊丝一区二区| 久久精品99国产精品日本| 亚洲午夜国产成人| 不卡在线一区二区| 激情六月综合| 国产精品国产三级国产在线观看| 亚洲精品日韩久久| 亚洲国产日韩欧美在线| 欧美xxxx中国| 日韩精品第一| 欧美日韩四区| 群体交乱之放荡娇妻一区二区| 国产精品片aa在线观看| 免费看日韩精品| 日韩亚洲一区在线| 成人精品久久| 国产精品一卡| 亚洲精品视频一二三区| 亚洲二区免费| 国产理论在线| 日韩啪啪电影网| 亚洲午夜黄色| 亚洲五月婷婷| 亚洲精品一级二级三级| 亚洲免费成人| 欧美日一区二区三区在线观看国产免| 国产一区亚洲| 鲁大师成人一区二区三区| 国产精品毛片一区二区三区| 婷婷综合社区| 亚洲九九精品| 91亚洲无吗| 精品国产鲁一鲁****| 青青久久av| 免费视频久久| 欧美日韩夜夜| 麻豆精品在线观看| 97精品一区| 午夜精品免费| 久久国产高清| 国产精品成久久久久| 精品国产美女a久久9999| 欧美国产一级| 噜噜噜久久亚洲精品国产品小说| 欧美日韩夜夜| 波多野结衣久久精品| 视频在线在亚洲| 老司机免费视频一区二区三区| 中文字幕在线高清| 在线精品一区| 精品久久中文| 亚洲乱码视频| 成人精品视频| 亚洲欧美激情诱惑| 91在线成人| 久久九九99| 国产精品白丝av嫩草影院| 午夜精品免费| 国产精品99一区二区三| 亚洲三级视频| 韩国三级一区| 欧美午夜网站| 久久中文字幕av| 欧美一级全黄| 中文精品在线| 久久黄色影院| 久久久久久亚洲精品美女| 亚洲精品影院在线观看| 高清av不卡| 蜜臀av性久久久久蜜臀aⅴ四虎 | 天堂网在线观看国产精品| 国产精品a久久久久| 爽好多水快深点欧美视频| 欧美日韩水蜜桃| 久久婷婷一区| 久久精品免费一区二区三区| 国产精品4hu.www| 视频在线观看一区| 国产精品女主播一区二区三区| 日韩欧美午夜| 激情自拍一区| 午夜一区在线| 999精品一区|