spatie / laravel-tinker-tools
在 Artisan tinker 会话中使用简短类名
Requires
- php: ^7.0
- illuminate/support: 5.3.*|5.4.*
Requires (Dev)
- phpunit/phpunit: ^6.0
This package is auto-updated.
Last update: 2024-09-21 18:25:44 UTC
README
此包的功能已内置到 Laravel 5.5 及以上版本,仅适用于较老版本的 Laravel
在 Artisan Tinker 会话中使用简短类名
当使用 Artisan 的 Tinker 命令时,输入完整的类名来进行简单操作可能会很麻烦。
\App\Models\NewsItem::first();
此包包含一个类,完全安装后,可以使用简短类名。
NewsItem::first();
支持我们
我们投入了大量资源来创建一流的开放式源代码包。您可以通过购买我们的付费产品之一来支持我们。
我们非常欢迎您从家乡寄给我们一张明信片,说明您正在使用我们哪个包。您可以在我们的联系页面上找到我们的地址。我们将所有收到的明信片发布在我们的虚拟明信片墙上。
安装
首先使用 Composer 安装包
composer require spatie/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_alias
来将NewsItem
别名改为App\Models\NewsItem
。
如果有多个类名相同会发生什么?
现在你可能想知道,如果不同的命名空间中有更多的相同名称的类会发生什么?例如App\Models\NewsItem
,Vendor\PackageName\NewsItem
。嗯,autoload_classmap.php
是根据完全限定命名空间按字母顺序排序的。所以将使用App\Models\NewsItem
而不是Vendor\PackageName\NewsItem
。
因为App
以"A"开头,所以在冲突的情况下,很可能选择你的应用程序中的一个类。目前还没有方法可以改变这种行为。我接受PR,使其可定制。
需要更多Tinker魔法?
在tinker.config.php
中可以设置很多其他选项。通过阅读[官方psysh配置文档]来学习所有选项。
更新日志
请查看[更新日志]以获取有关最近更改的更多信息。
测试
$ composer test
贡献
请查看[贡献指南]以获取详细信息。
安全
如果你发现与安全相关的错误,请通过邮件security@spatie.be联系,而不是使用问题跟踪器。
明信片软件
你可以自由使用这个包(它是MIT许可),但如果它进入了你的生产环境,我们非常感激你从你的家乡寄给我们一张明信片,提到你正在使用我们哪些包。
我们的地址是:Spatie,Kruikstraat 22,2018 安特卫普,比利时。
我们在公司网站上[发布]所有收到的明信片。
鸣谢
我们从阅读[Caleb Porzio](https://twitter.com/calebporzio)的优秀博客文章《Supercharge Your Laravel Tinker Workflow》中的“Tailoring Tinker with custom config”部分得到了关于ShortClassnames
的想法。[查看博客]
许可
MIT许可(MIT)。请参阅[许可文件]获取更多信息。