krigamba/laravel-tinker-tools

在 Artisan tinker 会话中使用简短的类名 -> 支持 php 5

v1.1.1 2017-08-18 05:31 UTC

This package is not auto-updated.

Last update: 2024-09-18 22:07:36 UTC


README

Latest Version on Packagist Build Status StyleCI Quality Score Total Downloads

当使用 Artisan 的 Tinker 命令时,必须输入完整的类名来做一些简单的事情,这可能会很麻烦。

此包需要 >= PHP 5.0。父包只支持 PHP 7.0

如果您在使用它时遇到问题,请随时联系我

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

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

NewsItem::first();

安装

首先,通过 Composer 安装此包

composer require kigamba/laravel-tinker-tools

接下来,在您的 Laravel 应用的根目录下创建一个名为 .psysh.php 的文件,并包含以下内容

<?php

\Spatie\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

现在,为了让这个包正常工作,\Spatie\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 配置文档来了解所有选项。

明信片软件

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

我们的地址是:Spatie,Samberstraat 69D,2060 安特卫普,比利时。

我们将所有收到的明信片发布在我们的公司网站上

变更日志

请参阅变更日志以获取有关最近更改的更多信息。

测试

$ composer test

贡献

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

安全

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

致谢

我们从阅读Caleb Porzio出色的博客文章《Supercharge Your Laravel Tinker Workflow》中的“Tailoring Tinker with custom config”部分得到了ShortClassnames的想法。

关于Spatie

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

许可

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