php shell 交互,通過 Tinker 實現 Laravel 命令行交互式 Shell

通過 Tinker 實現 Laravel 命令行交互式 Shell

由 學院君 創建于2年前, 最后更新于 1年前

版本號 #1

9508 views

4 likes

0 collects

REPL 與 PsySH

Laravel 自帶了一個功能強大的 REPL —— Tinker,所謂 REPL,是 Read–Eval–Print-Loop 的縮寫,這是一種交互式 Shell:獲取用戶輸入并執行它們,然后將結果打印出來返回給用戶。

在原生 PHP 中,我們也可以使用類似的交互式 Shell,通過 php -a 命令即可:

a247c30096cef35d6165abd70f04b39f.png

此外,還可以通過 PsySH 實現,相較于原生的 php -a,PsySH 擁有更多高級特性,因此功能更加強大。在使用 PsySH 之前,需要通過 Composer 全局安裝:

composer g require psy/psysh:@stable

然后就可以在命令行執行 psysh 進入交互式 Shell 了(確保全局 Composer 的 bin 目錄在系統路徑中),在 PsySH 中我們能編寫各種代碼,打印語句、計算表達式、編寫函數等等:

d62b36f8d83abc5ffb06d855f87e9235.png

甚至還支持基于 XDebug 進行代碼調試、與系統 Shell 集成等等,更多使用方法可以參考官方文檔。

Laravel Tinker 就是基于 PsySH 實現的,與 Artisan 主要用于編寫和執行 Artisan 命令不同,通過 Tinker,我們可以在命令行中實現與 Laravel 應用的各種交互,包括數據庫的增刪改查。

Laravel Tinker 使用

下面我們一起來看一下如何通過 Tinker 賦能本地 Laravel 開發。在命令行中通過 php artisan tinker 即可進入 Laravel Tinker 的交互式 Shell。

查看幫助文檔

在 Laravel Tinker 中,doc 命令可用于查看某個函數或方法的幫助文檔,例如,我們想查看輔助函數 config() 如何使用,可以這么做:

4d7a1ea3d97de9238208c23793ccdc32.png

就會將 config() 函數的文檔信息打印出來,如果你還想進一步查看該函數的代碼,通過 show 命令來實現:

69a363223bb98018d3be35a703c0c3d1.png

是不是很方便?當然,僅限于函數查看,類方法雖然支持,但是還是通過 PHPStorm 的跳轉功能快(因為要輸入完整的命名空間)。

運行 Artisan 命令

此外,每次我們運行 php artisan tinker 就相當于從控制臺啟動了 Laravel 應用,在運行交互式命令前,tinker 命令會添加一些命令到 Shell,這些命令定義在 Laravel\Tinker\Console\TinkerCommand 的 $commandWhitelist 屬性中:

protected $commandWhitelist = [

'clear-compiled', 'down', 'env', 'inspire', 'migrate', 'optimize', 'up',

];

因此,你可以在 Tinker Shell 中直接運行這些命令:

8ee270ba2df55788f23092243d36034d.png

測試 Laravel 代碼

看完前面兩個功能,可能你對 Tinker 還是提不起來興趣,畢竟都是可以借助其他方式可以快速完成的,甚至效率更高。接下來要介紹的,則是 Tinker 最有用的功能了,我們可以在 Tinker Shell 中演練測試 Laravel 代碼。比如模型和服務,你可以使用控制臺來創建一個新的模型,將其保存到數據庫,然后查詢這條記錄(如果之前沒有運行過 php artisan migrate 命令創建 users 表,先運行 migrate 命令創建):

ac31c13dec957bd297a4783488af061a.png

當然,我們還可以通過工廠方法 factory() 批量創建用戶,這在測試的時候很方便,比如說我們隨機創建三個用戶:

9474109931377cf111414d52c14f9d32.png

此外,Tinker 還是個手動觸發隊列任務、體驗服務和事件的好地方,例如,下面我們從容器獲取一個日志服務并新增一條日志:

d7317a278d07265fc594ae8136b93541.png

打開 storage/logs/laravel.log,就會看到日志已經寫進去了:

[2018-11-21 02:13:05] local.INFO: test

了解更多

這里,我們只是介紹了一些入門級的使用示例,更多好玩的東西有賴于你自己在日常開發中去探索,PsySH 官方文檔 有很多資源讓你了解 Tinker 的底層,如果你想了解更多關于 Tinker 的內容,可以去 Tinker 的 GitHub 倉庫逛逛。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/533878.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533878.shtml
英文地址,請注明出處:http://en.pswp.cn/news/533878.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python中垃圾回收機制_Python中的變量和垃圾回收機制

1、python中的變量python和java中的變量本質不一樣。java中聲明變量時要指定變量的數據類型,int、str或某一類,之后虛擬機就會在內存中申請一塊空間,空間的大小跟類型相關。通俗的理解就是把變量想象成一個盒子,盒子里能裝什么東西…

戴爾電腦好還是華為好_華碩和戴爾筆記本哪種好 華碩和戴爾優缺點分析【詳解】...

隨著時代快速的發展,筆記本電腦已經成了我們生活中的標配。如今,市面上筆記本電腦的款式眾多,相信大家對華碩和戴爾并不陌生吧!那么,我們該怎么去選擇呢?今天小編就給大家介紹華碩和戴爾筆記本哪個好&#…

php檢查 session是否存在,檢查sessionid已知的PHP會話是否處于活動狀態

實際上,您可以將session_id和session_start用于此目的.$ids [135b29ef958a23418f2a804474787305, // active session135b29ef958a23418f2a804474787306, // inactive session135b29ef958a23418f2a804474787305, // active session];foreach($ids as $id){session_id($id);sess…

c++ python混合編程 restful_簡單上手nodejs調用c++(c++和js的混合編程)

因為項目的原因,最近經常使用node.js搭RESTful接口。性能還是很不錯啦,感覺比Spring Boot之類的要快。而且在不錯的性能之外,只要程序結構組織好,別讓太多的回調把程序結構搞亂,整體開發效率比Java快的就太多了。如果想…

電腦掃描二維碼_線上分享 | 網絡工作坊:平板電腦工作術

澳門生產力暨科技轉移中心將于9月29日下午3時,舉辦資訊科技工具應用線上工作坊,講解平板電腦辦公應用,歡迎有興趣人士報名,名額有限,先到先得。該中心早前已舉辦是次主題的應用工作坊,坊間反應積極&#xf…

java bean 轉json 串,終于找到了一篇能看懂的如何把javabean轉換成json字符串的文章,嘿嘿,分享一下!...

學會了在j2ee中使用ajax后,有時候從服務器返回客戶端的數據是對象,自己手動拼湊json字符串容易出錯,通過谷歌知道了json-lib這個類庫,方便的支持java中對象到json字符串的轉化。看source-forge的json-lib介紹說,需要jakarta commo…

數據庫設置_CentOS7 - 設置MySQL數據庫

設置MySQL數據庫本文介紹如何在CentOS上執行流行的MySQL數據庫服務器的基本安裝。 MySQL是當今使用最廣泛的數據庫系統,它可以在許多不同的行業中找到,為動態網站和大型數據倉庫等各種產品提供數據存儲。準備此配方要求CentOS系統具有有效的網絡連接和管…

提出離職后怎么定last day_不管你因為什么離職,用正規的離職方式是你最正確的選擇!...

#不管你是因為什么離職,用正規的離職方式離職是你最正確的選擇,如果因為不恰當的方式造成與公司的矛盾,可能讓你今后會非常被動。書面離職是最具有法律效力的,按照勞動法,你有權在提出正式離職一個月后走人&#xff0c…

mqtt php 16進制數據,phpMQTT 內存耗死問題

場景:(訂閱)鏈接不上mqtt的時候,一下代碼會出錯:function read($int 8192, $nb false){// print_r(socket_get_status($this->socket));$string"";$togo $int;if($nb){return fread($this->socket, $togo);}// var_dump($this->so…

人臉識別代碼_10行代碼實現人臉識別

什么是人臉識別人臉識別,是基于人的臉部特征信息進行身份識別的一種生物識別技術。用攝像機或攝像頭采集含有人臉的圖像或視頻流,并自動在圖像中檢測和跟蹤人臉,進而對檢測到的人臉進行臉部識別的一系列相關技術,通常也叫做人像識…

ticketvalidationexception票根不符合目標服務_如何在有效降低企業倉儲成本的同時不降低企業的總體服務質量目標水平?...

對于企業而言,如何降低倉儲成本,同時要保證物流總成本最低和不降低企業的總體服務質量和目標水平的前提下進行,常見的措施有以下幾點:一用“先進先出方式,減少倉儲物的保管風險。”先進先出是儲存管理的準則之一&#…

matlab編程 英文翻譯,MATLAB編程,MATLAB programming,音標,讀音,翻譯,英文例句,英語詞典...

Image:114994698204558.jpgmatlabmatlab是矩陣實驗室(matrix laboratory)之意。除具備卓越的數值計算能力外,它還提供了專業水平的符號計算,文字處理,可視化建模仿真和實時控制等功能。matlab的基本數據單位是矩陣,它的指令表達式…

python進群_Manim-python 進群問題之解答

事情起因人閑下來的時候總想找點事情做!這不,昨天考完試后在B站上逛,不小心進入了學習區,在00后學長那里看到了一個視頻。鏈接如下:具有美感的傅里葉級數居然還能夠畫畫!!!這讓我一個…

python科學計算_可視化圖解Python科學計算包NumPy

NumPy包是python生態系統中數據分析、機器學習和科學計算的主力。 它極大地簡化了向量和矩陣的操作。Python的一些主要軟件包依賴于NumPy作為其基礎架構的基礎部分(例如scikit-learn、SciPy、pandas和tensorflow)。我們將介紹一些使用NumPy的主要方法&am…

php 導出excel 特殊字符,PHPEXCEL導出,存在特殊字符遇到的問題

[13] > Array([payment_success_at] >[user_name] > ?.琳琳?[remarks] >[product_name] > 香菇[sku_name] > 斤[product_property] > 斤[price_original] > 5.50[price_current] > 5.50[consignee] > ?.琳琳?)以上代碼中用戶名中存在特殊符號…

win10任務欄怎么還原到下面_詳解:新版 WIN 10 V2004 任務欄和開始菜單全透明

是不是很酷炫?繼續往下看,你也可以簡單做到導語本文將告訴你如何借助一個小工具,將最新版 WIN 10 開始菜單和任務欄設置成全透明,以獲得超酷的視覺體驗。安裝和設置都很簡單,關鍵是一定要找到適合 WIN 10 版本的 Start…

php是靜態語言,Thinkphp靜態緩存多語言切換

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓1.首先判斷用戶有無手動指定語言2.從session中獲得當前語言3.session里面沒有則從cookie里面去取4.若是cookie里沒有,則根據IP段判斷5.若不在指定ip范圍內,自動偵測瀏覽器語言首先我們在Common/Conf/tags.ph…

10.8.8.8檸檬wifi網頁登錄_基于企業郵箱進行wifi實名認證的方案

之前我們介紹過如何用釘釘認證和企業微信認證來實現企業內部的實名上網認證。此外郵箱認證也是企業進行wifi實名認證的一個有效手段。因為很多企業都給員工開通了企業郵箱,直接讓員工輸入郵箱賬號和密碼進行認證上網。配置、使用和維護都相對比較簡單。本文我將介紹…

用pycharm寫python老是提示錯誤_python pycharm錯誤集錦

url:http://www.cnblogs.com/hinimix/p/8016859.html1, this list creation could be rewritten as a list literal預先定義了一個listlist1 [1,2,3,4] #這么用好比list1 [1,2,3] #這么用不好list1.append(4)此時會出現該提示解決鏈接:https://stackoverflow.com/…

php tire樹,Immutable.js源碼之List 類型的詳細解析(附示例)

本篇文章給大家帶來的內容是關于Immutable.js源碼之List 類型的詳細解析(附示例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。一、存儲圖解我以下面這段代碼為例子,畫出這個List的存儲結構:let myL…