了解 Laravel Tinker Shell

前端之家收集整理的这篇文章主要介绍了了解 Laravel Tinker Shell前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

转载自:https://juejin.im/entry/5a4ef7be518825734978b612/

本文翻译整理自 Getting to Know the Laravel Tinker Shell

Laravel 包含一个强大的 REPL,称为 tinker,由 Justin Hileman 编写的 PsySH 控制台驱动。tinker 允许您从交互式 shell 中的命令行与 Laravel 应用程序进行交互。

tinker 曾经是 laravel/framework 软件包的一部分,但随着 Laravel 5.4 的发布被提取到独立的软件包中。

什么是REPL?

REPL 是 Read Eval Print Loop 的缩写,它是一种交互式 shell,它接受单个用户输入,运行它们,并将结果返回给用户。我最先是通过 Rails 控制台 了解了一个交互式控制台的概念,这个控制台是 Ruby on Rails 框架的一部分。其他语言,比如 Ruby ,配备了 REPL 作为语言功能。交互式 shell 是用语言和框架进行实验的好方法

PHP 有一个可以运行的交互式 shell:PHP -a,但是由于 PsySH 具有更多的特性,所以我将它用于 PHP 的一般交互式 shell 和 Laravel 应用程序的 tinker。

在Laravel 之外使用 PsySH

我强烈建议您全局安装 psysh 软件包。您可以通过 运行以下命令全局安装 psysh:

  1. composer global require psy/psysh:@stable

确保你的 Composer 包在你的 bin/ 目录下,这样你可以从任何地方运行 PsySH:

  1. export PATH="~/.composer/vendor/bin:$PATH"

要启动交互式会话,请运行 psysh 命令。下面是一个内置 show 命令的例子,它可以显示一个命令的源代码

  1. $ psysh
  2. Psy Shell v0.8.11 (PHP 7.1.5 cli) by Justin Hileman
  3. >>> show array_key_exists
  4. function array_key_exists($key,$search)
  5. Source code unavailable.

help 命令是您的朋友,以便您可以看到 PsySH 内置的功能

  1. >>> help
  2. help
  3. ls
  4. dump
  5. doc
  6. show
  7. ...

我已经删除了帮助命令的描述,但我觉得你应该能看明白这些命令的作用。

当需要引用函数的工作方式时,甚至可以将 PHP 核心文档 作为 CLI 协同服务器下载:

  1. $ mkdir -p ~/.local/share/psysh/
  2. $ wget -O \
  3. ~/.local/share/psysh/PHP_manual.sqlite
  4. http://psysh.org/manual/en/PHP_manual.sqlite

安装 PHP 手册后,您可以阅读文档,然后在 CLI 中尝试:

  1. $ psysh
  2. Psy Shell v0.8.11 (PHP 7.1.5 cli) by Justin Hileman
  3. >>> doc array_key_exists
  4. psysh
  5. Psy Shell v0.8.11 (PHP 7.1.5 cli) by Justin Hileman
  6. >>> doc array_key_exists
  7. function array_key_exists($key,$search)
  8.  
  9. Description:
  10. Checks if the given key or index exists in the array
  11.  
  12. array_key_exists() returns TRUE if the given $key
  13. is set in the array. $key can be any value
  14. possible for an array index.
  15. ...
  16.  
  17. >>> array_key_exists('car',['bike' => 'BMX']);
  18. => false

我一直使用 PsySH 来查看内置的 PHP 函数是如何工作的,并以交互的方式使用 PHP 进行测试。我用来创建一个 index.PHP 文件,并用 PHP 命令运行它来验证语言特性,而不是使用 REPL。下一次你这样做,请尝试使用 PsySH!history 单独的命令值得使用 REPL,你可以调用以前的命令。

Laravel Tinker: PsySH on Steroids

就像我之前提到的那样,tinker 基于 PsySH。将 tinker 程序视为试用 Laravel 的最佳方法之一。让我们来看看几个不错的功能,这些功能应该可以使您的开发工作流程与 Laravel 相提并论。

文档命令

该doc命令是查找有关函数方法的文档的有效方法。例如,假设您想查看 request() 帮助函数的工作方式:

  1. $ PHP artisan tinker
  2. >>> doc request
  3. function request($key = null,$default = null)
  4.  
  5. Description:
  6. Get an instance of the current request or an input item from the request.
  7.  
  8. Param:
  9. array|string $key
  10. mixed $default
  11.  
  12. Return:
  13. \Illuminate\Http\Request|string|array

或者,也许我想看到的是 request()代码

  1. >>> show request
  2. > 633| function request($key = null,$default = null) 634| {
  3. 635| if (is_null($key)) {
  4. 636| return app('request');
  5. 637| }
  6. 638|
  7. 639| if (is_array($key)) {
  8. 640| return app('request')->only($key);
  9. 641| }
  10. 642|
  11. 643| return data_get(app('request')->all(),$key,$default);
  12. 644| }

在 Tinker 中使用 Artisan 命令

运行 PHP artisan tinker,该命令将会启动 Laravel 引导的交互式 PsySH shell。在运行 shell 之前,tinker 会将将一些 Artisan 命令添加到 shell。这些命令在 TinkerCommand 类的 $commandWhitelist 属性 中被定义。

  1. protected $commandWhitelist = [
  2. 'clear-compiled','down','env','inspire','migrate','optimize','up',];

从这个列表中,您可以看到可以运行 updown 切换维护模式。您也可以运行 migrate 以执行任何未执行的迁移。最后,你可以运行 clear-compiled 清除编译后的类文件

测试 Laravel 代码

这可能 Tinker 最有用的部分之一,就是能够使用 Laravel 的代码,比如 ModelServices。您可以使用控制台创建一个新的 Model,例如:

  1. $ PHP artisan tinker
  2. >>> use App\User;
  3. >>> $user = new User([
  4. 'name' => 'John','email' => 'john@example.com'
  5. ]);
  6. $user->password = bcrypt('example');
  7. => "$2y$10$2l1vIXYJy.Q5otmdaaNG5./l4jbxpYYlhrSipZAsJRwAuuzjsSXlq"
  8. $user->save();
  9. => true
  10. $user->toArray();
  11. => [
  12. "name" => "John","email" => "john@example.com","updated_at" => "2017-09-12 06:37:13","created_at" => "2017-09-12 06:37:13","id" => 1,]

这是我在 tinker数据库相关的命令中最喜欢的一个用法,使用 factory() 帮助函数来创建测试用户

  1. $ PHP artisan tinker
  2. >>> use App\User;
  3. >>> factory(User::class,5)->create();
  4. ...

以下是如何查询用户模型以从users表中返回十个结果:

  1. $PHP artisan tinker
  2. >>> use App\User;
  3. >>> User::limit(10)->get();
  4. => Illuminate\Database\Eloquent\Collection {#1071
  5. all: [
  6. App\User {#1072
  7. id: 1,publisher_id: null,name: "John",email: "john@example.com",created_at: "2017-09-12 06:37:13",updated_at: "2017-09-12 06:37:13",},],}
  8. >>>

tinker 是触发 jobs 工作和尝试诸如 servicesjobsevents 之类的好地方。例如,在这里,我们从容器中获取日志服务并写入日志:

  1. $ PHP artisan tinker
  2. >>> $log = app('log');
  3. => Illuminate\Log\Writer {#1042}
  4. >>> $log->info('test');
  5. => null

学到更多

找出更多的最好方法是进入 Tinker 会话,并使用 help 命令,如果你忘记了你可以运行的命令。官方 psysh 文档 是熟悉底层交互式 shell 的极好资源。交互式调试器功能和 wtf 命令是你应该查看的一些功能。如果您想了解更多关于 tinker 的工作原理,请参阅GitHub上的 laravel/tinker

@H_585_403@

猜你在找的Bash相关文章