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

站長資訊網
最全最豐富的資訊網站

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

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

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

推薦學習:Laravel入門

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

默認提供的腳本

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

# php artisan key:generate # php artisan serve

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

關于這些默認自帶的腳本,我們將在學習到相關內容的時候順帶著一起學習。

自定義一個腳本

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

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

這時,在 app/Console/Commands 目錄下就會出現一個 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 用于設定當前這個腳本的名稱,description 用于定義腳本的注釋說明。它們用在什么地方呢?其實 signature 就是我們通過 php artisan 來運行這個腳本時所需要用到的那個名稱。比如我們現在直接執行 php artisan 的話,就會看到下面這樣一條可執行命令行腳本的出現。

 command   command:name         Command description

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

/**  * 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

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

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() 函數中,我們可以編寫當前這個腳本需要執行的功能代碼。其中,通過 arguments() 和 argument() 可以接收到腳本的參數信息,通過 options() 和 option() 可以接收到腳本的選項信息。關于參數和選項的問題,之前的文章中我們也講解過了,這里也就不多說了,一切都是以基礎為準的。

參數選項源碼分析

對于參數和選項來說,Laravel 的底層調用的其實是 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 獲取參數和選項,然后將它們放到 input 變量中向下傳遞。這個 input 變量很重要,后面我們在學習請求相關的內容時也會接觸到。之后在我們的執行代碼中,也就是 Command 的 handle() 方法中使用 argument() 或者 option() 獲取到的就是這個 input 中的數據。從斷點調試中我們就可以看到它們的身影。

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

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

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

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

推薦學習:Laravel視頻教程

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
最新亚洲一区| 久久久国产精品一区二区中文| 香蕉久久99| 午夜影院欧美| 亚洲欧洲另类| 天海翼亚洲一区二区三区| 日韩成人午夜精品| 精品视频一区二区三区在线观看 | 欧美亚洲国产精品久久| 亚洲激情中文| 亚洲精品极品| 麻豆精品在线播放| 亲子伦视频一区二区三区| 最新日韩av| 成人免费电影网址| 99精品网站| 久久天堂成人| 999久久久亚洲| 少妇高潮一区二区三区99| 视频一区中文字幕国产| 日韩有码av| 国产精品magnet| 久久天堂av| 蜜臀久久久久久久| 麻豆精品久久| 欧美日韩四区| 久久xxx视频| 麻豆精品蜜桃| 精品久久电影| 精品91久久久久| 夜夜嗨一区二区| 国产欧美日韩| 久久久影院免费| 日韩三级久久| 日韩精品欧美激情一区二区| 日本亚洲三级在线| 日韩一区电影| 日韩动漫一区| 久久视频国产| 国产欧美丝祙| 亚洲手机视频| 久久精品国产亚洲一区二区三区| 亚洲二区视频| 国产精品成人自拍| 日韩影院免费视频| 日本美女一区| 欧美日韩调教| 欧美亚洲国产精品久久| 国产探花一区二区| 一本一本久久| 亚洲天堂免费电影| 麻豆精品99| 视频一区二区欧美| 精品一区av| 欧美日韩视频免费看| 女人天堂亚洲aⅴ在线观看| 精品久久久亚洲| 久久国产三级| 蜜芽一区二区三区| 欧美.日韩.国产.一区.二区 | 青草国产精品| 狠狠久久婷婷| 日韩精品诱惑一区?区三区| 国产毛片久久久| 久热综合在线亚洲精品| 日韩成人亚洲| 精品三级av| 国产日韩三级| 日本一区二区三区视频在线看| 91精品一区二区三区综合在线爱| 国产欧美日韩免费观看| 日韩中文字幕av电影| 快播电影网址老女人久久| 国产日韩1区| 日韩中文字幕视频网| 日韩视频在线一区二区三区| 久久中文字幕二区| 国产a亚洲精品| 久久午夜影院| 国产精品tv| 国产亚洲精aa在线看 | 中文字幕av一区二区三区四区| 婷婷精品进入| 香蕉久久99| 美女久久久久| 99精品网站| 香蕉成人av| 电影91久久久| 激情国产在线| 福利视频一区| av资源中文在线天堂| 韩日一区二区| 国产精品亚洲欧美| 久久av影院| 美女av一区| 精品资源在线| 91一区二区三区四区| 最新中文字幕在线播放| 韩国精品主播一区二区在线观看 | аⅴ资源天堂资源库在线| 鲁大师精品99久久久| 免费视频一区二区三区在线观看| 欧美激情日韩| 精品久久99| 日韩在线视频精品| 免费欧美一区| 丝袜美腿亚洲一区二区图片| 久久福利一区| 午夜亚洲福利| 国产精品免费精品自在线观看| 国产精品欧美大片| 国产成人久久| 亚洲夜间福利| 日本一区二区三区中文字幕| 久久激情五月激情| 久久99精品久久久野外观看| 精品美女久久| 日本少妇一区| 自拍自偷一区二区三区| 国产乱码精品一区二区三区亚洲人| 国产精品99久久免费| 亚洲美女久久精品| 制服诱惑一区二区| 深夜福利亚洲| 精品一级视频| 婷婷色综合网| 日本精品一区二区三区在线观看视频 | 亚洲精品国产精品粉嫩| 日韩一区中文| 色欧美自拍视频| 免费黄色成人| 欧美日韩一视频区二区| 超碰在线99| 丝袜亚洲精品中文字幕一区| 国产伦乱精品| 999精品色在线播放| 免费成人在线观看| 久久婷婷国产| 黑丝一区二区| 欧美成人一二区| 午夜国产欧美理论在线播放| 日本h片久久| 国内亚洲精品| 亚洲3区在线| 成人精品高清在线视频| 夜夜嗨av一区二区三区网站四季av| 久久国产三级| 欧美亚洲激情| 国产精品xxx在线观看| 99久久亚洲精品蜜臀| 日韩激情网站| 欧美日韩国产一区二区三区不卡| 精品久久不卡| 日韩午夜视频在线| 亚洲高清二区| 久久av网站| 亚洲精品麻豆| 亚洲韩日在线| 国产极品久久久久久久久波多结野 | 欧美日韩一区二区三区四区在线观看| 在线精品亚洲欧美日韩国产| 日韩影片在线观看| 国产一区视频在线观看免费| 久久不卡日韩美女| 亚洲一区二区三区久久久| 麻豆网站免费在线观看| 日韩欧美三区| 91九色精品| 精品国产乱码久久久久久樱花| 蜜臀精品一区二区三区在线观看 | 午夜在线精品| 91综合网人人| 国产精品日本一区二区不卡视频| 亚洲欧美日韩视频二区| 精品国产一区二区三区av片| 伊人久久大香伊蕉在人线观看热v| 国产网站在线| 欧美极品中文字幕| 亚洲2区在线| 亚洲中字黄色| 久久蜜桃精品| 福利一区视频| 麻豆91小视频| 欧美日韩一区二区三区不卡视频| 99国产精品| 日本不良网站在线观看| 国产经典一区| 91精品丝袜国产高跟在线| 福利精品在线| 久久只有精品| 国产精东传媒成人av电影| 婷婷视频一区二区三区| 一本一道久久a久久精品蜜桃| 神马午夜久久| 五月激情久久| 99久久亚洲精品蜜臀| 久久要要av| 五月天激情综合网| 欧美日韩国产在线观看网站| 婷婷成人综合|