• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Laravel Tinker Shell

武飞扬头像
红烧不是清蒸
帮助3

学新通

本文翻译整理自 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:

composer global require psy/psysh:@stable

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

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

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

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

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

>>> help
  help
  ls         
  dump       
  doc        
  show       
  ...

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

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

$ mkdir -p ~/.local/share/psysh/
$ wget -O \
  ~/.local/share/psysh/php_manual.sqlite
  http://psysh.org/manual/en/php_manual.sqlite

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

$ psysh
Psy Shell v0.8.11 (PHP 7.1.5 — cli) by Justin Hileman
>>> doc array_key_exists
psysh
Psy Shell v0.8.11 (PHP 7.1.5 — cli) by Justin Hileman
>>> doc array_key_exists
function array_key_exists($key, $search)

Description:
  Checks if the given key or index exists in the array

  array_key_exists() returns TRUE if the given $key
  is set in the array. $key can be any value
  possible for an array index.
...

>>> array_key_exists('car', ['bike' => 'BMX']);
=> false

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

Laravel Tinker: PsySH on Steroids

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

文档命令

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

$ php artisan tinker
>>> doc request
function request($key = null, $default = null)

Description:
  Get an instance of the current request or an input item from the request.

Param:
  array|string  $key
  mixed         $default

Return:
  \Illuminate\Http\Request|string|array

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

>>> show request
  > 633|     function request($key = null, $default = null)
    634|     {
    635|         if (is_null($key)) {
    636|             return app('request');
    637|         }
    638|
    639|         if (is_array($key)) {
    640|             return app('request')->only($key);
    641|         }
    642|
    643|         return data_get(app('request')->all(), $key, $default);
    644|     }

在 Tinker 中使用 Artisan 命令

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

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

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

测试 Laravel 代码

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

$ php artisan tinker
>>> use App\User;
>>> $user = new User([
'name' => 'John',
'email' => 'john@example.com'
]);
$user->password = bcrypt('example');
=> "$2y$10$2l1vIXYJy.Q5otmdaaNG5./l4jbxpYYlhrSipZAsJRwAuuzjsSXlq"
$user->save();
=> true
$user->toArray();
=> [
     "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() 帮助函数来创建测试用户:

$ php artisan tinker
>>> use App\User;
>>> factory(User::class, 5)->create();
...

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

$php artisan tinker
>>> use App\User;
>>> User::limit(10)->get();
=> Illuminate\Database\Eloquent\Collection {#1071
     all: [
       App\User {#1072
         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",
       },
        ],
    }
>>>

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

$ php artisan tinker
>>> $log = app('log');
=> Illuminate\Log\Writer {#1042}
>>> $log->info('test');
=> null

学到更多

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

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanheagfif
系列文章
更多 icon
同类精品
更多 icon
继续加载