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.mzph.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…