All Projects → spatie → Laravel Tinker Tools

spatie / Laravel Tinker Tools

Licence: mit
Use short class names in an Artisan tinker session

Projects that are alternatives of or similar to Laravel Tinker Tools

Docker Laravel
Laravel 5 with Dockerized Gulp, PHP-FPM, MySQL and nginx using docker-compose
Stars: ✭ 85 (-36.57%)
Mutual labels:  laravel, composer
Laravel Stats
📈 Get insights about your Laravel or Lumen Project
Stars: ✭ 1,386 (+934.33%)
Mutual labels:  laravel, composer
Laravel Bandwagon
Social proof package for Laravel
Stars: ✭ 93 (-30.6%)
Mutual labels:  laravel, composer
Easy Short Url
ESU 短网址,可在 Laravel、Yii、ThinkPHP 等框架 Composer 包引入,也可以独立搭建短网址站点
Stars: ✭ 71 (-47.01%)
Mutual labels:  laravel, composer
Rpg
Online Role Playing Game (based on Laravel)
Stars: ✭ 121 (-9.7%)
Mutual labels:  laravel, composer
Laravel Sitemap
Laravelium Sitemap generator for Laravel.
Stars: ✭ 1,231 (+818.66%)
Mutual labels:  laravel, composer
Thumbnail
Thumbnail for a given video using FFMpeg
Stars: ✭ 96 (-28.36%)
Mutual labels:  laravel, composer
Lara Eye
Filter your Query\Builder using a structured query language
Stars: ✭ 39 (-70.9%)
Mutual labels:  laravel, composer
Sms
Laravel SMS Gateway Integration Package
Stars: ✭ 112 (-16.42%)
Mutual labels:  laravel, composer
Laravel Alert
A Bootstrap alert helper for Laravel
Stars: ✭ 110 (-17.91%)
Mutual labels:  laravel, composer
Laravel Restify
The fastest way to make a powerful JSON:API compatible Rest API with Laravel.
Stars: ✭ 62 (-53.73%)
Mutual labels:  laravel, composer
Laravel Hashids
A Hashids bridge for Laravel
Stars: ✭ 1,714 (+1179.1%)
Mutual labels:  laravel, composer
Larrock Core
Core components for LarrockCMS
Stars: ✭ 46 (-65.67%)
Mutual labels:  laravel, composer
Project
⭐️ Antares Project Application Skeleton. This is the very first place you should start. It allows you to create a brand new awesome project in easy few steps.
Stars: ✭ 84 (-37.31%)
Mutual labels:  laravel, composer
Datagrid
Datagrid for Laravel v5
Stars: ✭ 44 (-67.16%)
Mutual labels:  laravel, composer
Laravel Backup
A easy-to-use backup manager for Laravel
Stars: ✭ 93 (-30.6%)
Mutual labels:  laravel, composer
Nem Php
NEM Blockchain NIS API Wrapper and Software Development Kit for PHP
Stars: ✭ 32 (-76.12%)
Mutual labels:  laravel, composer
Htmlcache
Laravel middleware to cache the rendered html
Stars: ✭ 35 (-73.88%)
Mutual labels:  laravel, composer
Llum
Llum (light in catalan language) illuminates your Laravel projects speeding up your Github/Laravel development workflow
Stars: ✭ 107 (-20.15%)
Mutual labels:  laravel, devtools
Docker Octobercms
Dockerized October CMS: PHP, Composer, October core and dependencies
Stars: ✭ 125 (-6.72%)
Mutual labels:  laravel, composer

The functionality of this package is built into Laravel 5.5 and above, only install this in older Laravel versions

Use short class names in an Artisan Tinker session

Latest Version on Packagist Build Status StyleCI Quality Score Total Downloads

When using Artisan's Tinker command it can be quite bothersome having to type the fully qualified classname to do something simple.

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

This package contains a class that, when fully installed let's you use the short class names:

NewsItem::first();

Support us

We invest a lot of resources into creating best in class open source packages. You can support us by buying one of our paid products.

We highly appreciate you sending us a postcard from your hometown, mentioning which of our package(s) you are using. You'll find our address on our contact page. We publish all received postcards on our virtual postcard wall.

Installation

First install the package via Composer:

composer require spatie/laravel-tinker-tools

Next, create a file named .psysh.php in the root of your Laravel app with this content:

<?php

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

Finally, dump the optimized version of the autoloader so autoload_classmap.php gets created:

composer dump-autoload -o

Usage

Open up a Tinker session with:

php artisan tinker

Inside that Tinker session you can now use short class names:

NewsItem::first();

A peek behind the curtains

When you use a class that hasn't been loaded in yet, PHP will call the registered autoloader functions. Such autoloader functions are responsible for loading up the requested class. In a typical project Composer will register an autoloader function that can include the file where the class is stored in.

Composer has a few ways to locate the right files. In most cases it will convert the fully qualified class name to a path. For example, when using a class App\Models\NewsItem Composer will load the file in app/Models/NewsItem.php. It's a bit more complicated behind the scenes but that's the gist of it. To make the process of finding a class fast, Composer caches all the fully qualified classnames and their paths in the generated autoload_classmap.php, which can be found in vendor/composer.

Now, to make this package work, \Spatie\TinkerTools\ShortClassNames will read Composer's autoload_classmap.php and convert the fully qualified class names to short class names. The result is a collection that's being kept in the $classes property

Our class will also register an autoloader. When you use NewsItem in your code. PHP will first call Composer's autoloader. But of course that autoloader can't find the class. So the autoloader from this package comes next. Our autoloader will use the aforementioned $classes collection to find to fully qualified class name. It will then use class_alias to alias NewsItem to App\Models\NewsItem.

What happens if there are multiple classes with same name?

Now you might wonder what'll happen it there are more classes with the same name in different namespaces? E.g. App\Models\NewsItem, Vendor\PackageName\NewsItem. Well, autoload_classmap.php is sorted alphabetically on the fully qualified namespace. So App\Models\NewsItem will be used and not Vendor\PackageName\NewsItem.

Because App starts with an "A" there's a high chance that, in case of a collision, a class inside your application will get picked. Currently there are no ways to alter this. I'd accept PRs that make this behaviour customizable.

Need more Tinker magic?

There are a lot of other options that can be set in tinker.config.php. Learn all the options by reading the official psysh configuration documentation.

Changelog

Please see CHANGELOG for more information what has changed recently.

Testing

$ composer test

Contributing

Please see CONTRIBUTING for details.

Security

If you discover any security related issues, please email [email protected] instead of using the issue tracker.

Postcardware

You're free to use this package (it's MIT-licensed), but if it makes it to your production environment we highly appreciate you sending us a postcard from your hometown, mentioning which of our package(s) you are using.

Our address is: Spatie, Kruikstraat 22, 2018 Antwerp, Belgium.

We publish all received postcards on our company website.

Credits

We got the idea for ShortClassnames by reading the "Tailoring Tinker with custom config" section of Caleb Porzio's excellent blogpost "Supercharge Your Laravel Tinker Workflow".

License

The MIT License (MIT). Please see License File for more information.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].