sdbruder/laravel-tinker-tools

在 Artisan Tinker 会话中使用简短类名

1.0.1 2017-05-23 16:12 UTC

This package is not auto-updated.

Last update: 2024-09-29 03:57:55 UTC


README

Latest Version on Packagist Build Status StyleCI Quality Score Total Downloads

这是一个分支

这是 spatie/laravel-tinker-tools 的分支版本,允许使用较旧的 Laravel 版本(目前测试了 5.2-5.4)。

在 Artisan Tinker 会话中使用简短类名

当使用 Artisan 的 Tinker 命令时,输入完整的类名来做简单操作可能会很麻烦。

\App\Models\NewsItem::first();

此包包含一个类,当完全安装后,可以使用简短类名

NewsItem::first();

安装

首先使用 Composer 安装此包

composer require sdbruder/laravel-tinker-tools

接下来,在 Laravel 应用程序的根目录中创建一个名为 .psysh.php 的文件,内容如下

<?php

\Sdbruder\TinkerTools\ShortClassNames::register();

最后,导出自动加载器的优化版本,以便创建 autoload_classmap.php

composer dump-autoload -o

用法

使用以下命令打开 Tinker 会话

php artisan tinker

在 Tinker 会话中,你现在可以使用简短类名

NewsItem::first();

幕后的秘密

当你使用尚未加载的类时,PHP 将调用已注册的自动加载器函数。这些自动加载器函数负责加载请求的类。在典型项目中,Composer 将注册一个自动加载器函数,该函数可以 include 存储类的文件。

Composer 有几种方法来定位正确的文件。在大多数情况下,它将完全合格的类名转换为路径。例如,当使用类 App\Models\NewsItem 时,Composer 将加载 app/Models/NewsItem.php 中的文件。背后的情况更加复杂,但这就是基本原理。为了使查找类的过程快速,Composer 将所有完全合格的类名及其路径缓存在生成的 autoload_classmap.php 中,该文件位于 vendor/composer

现在,为了使此包工作,\Sdbruder\TinkerTools\ShortClassNames 将读取 Composer 的 autoload_classmap.php 并将完全合格的类名转换为简短类名。结果是保存在 $classes 属性 中的集合。

我们的类还将 注册一个自动加载器。当你使用代码中的 NewsItem 时,PHP 将首先调用 Composer 的自动加载器。但当然,这个自动加载器找不到类。所以下一个是此包的自动加载器。我们的自动加载器将使用上述的 $classes 集合来查找完全合格的类名。然后它将使用 class_aliasNewsItem 别名为 App\Models\NewsItem

如果有多个类具有相同的名称会怎样?

现在你可能想知道如果有多个类在不同的命名空间中具有相同的名称会发生什么?例如,App\Models\NewsItemVendor\PackageName\NewsItem。好吧,autoload_classmap.php 按完全合格的命名空间字母顺序排序。所以将使用 App\Models\NewsItem,而不是 Vendor\PackageName\NewsItem

因为 App 以 "A" 开头,所以在碰撞的情况下,可能会选择你应用程序中的某个类。目前还没有方法可以更改此行为。我会接受使此行为可自定义的 PR。

需要更多的 Tinker 魔法吗?

tinker.config.php中可以设置许多其他选项。通过阅读官方 psysh 配置文档来了解所有选项。

Postcardware

您可以自由使用此软件包(它是MIT许可的),但如果它进入了您的生产环境,我们非常欢迎您从家乡给我们寄一张明信片,注明您正在使用我们哪个软件包。

Sergio的地址是:Sergio Bruder,Av Pres Altino, 1619 - T2 AP15, São Paulo, Brazil。

Freek的地址是:Spatie,Samberstraat 69D, 2060 Antwerp, Belgium。

Freek将所有收到的明信片发布在Spatie网站上

Sergio将在他收到第一张明信片时发布。

变更日志

请参阅变更日志,了解最近有哪些更改。

测试

$ composer test

贡献

请参阅贡献指南以获取详细信息。

安全性

如果您发现任何安全相关的问题,请通过电子邮件sergio@bruder.com.br联系,而不是使用问题跟踪器。

鸣谢

我们通过阅读Caleb Porzio的优秀博客文章《Supercharge Your Laravel Tinker Workflow》中的“Tailoring Tinker with custom config”部分,获得了ShortClassnames的想法。

关于Spatie

Spatie是一家位于比利时安特卫普的网页设计公司。您可以在我们的网站上找到所有开源项目的概述在这里

关于Sergio

Sergio是一位非常喜欢laravel-tinker-tools的开发者,但仍然维护着遗留代码。最初他提供了一个PR来修复Laravel 5.2的bug,但Freek只对最新版本的Laravel感兴趣,这就是这个分支的原因。目前唯一的区别是,支持Laravel 5.2+。

许可证

MIT许可证(MIT)。请参阅许可证文件以获取更多信息。