Awesome
⛔️ Laravel Tinx (Deprecated)
Laravel Tinx was archived on 12th December 2019 and is no longer maintained.
Looking for a reloadable version of Laravel Tinker?
Save the following script as tinx.sh
to your project root directory:
#!/bin/sh
while true; do php artisan tinker; done
Run the script to launch a reloadable version of Tinker:
$ . tinx.sh
While your Tinker session is running, press:
- <kbd>Ctrl</kbd> + <kbd>D</kbd> from an empty prompt to reload your session
- <kbd>Ctrl</kbd> + <kbd>C</kbd> to exit your session
Can't see newly created classes in Tinker?
Exit your Tinker session and run:
$ composer dump -o
Thanks for loving Laravel, and thanks for digging Tinx.
Happy coding!
🤓👋
Laravel Tinx
Laravel Tinker, <b>re()</b>loaded.
Reload your session from inside Tinker, plus magic shortcuts for first(), find(), where(), and more!
<img src="https://i.imgur.com/U9NnDix.gif" title="source: imgur.com" />Contents
Installation
To install Tinx, simply require it via Composer:
composer require --dev ajthinking/tinx
If using Laravel <=5.4, register Tinx's service provider in config/app.php
(Laravel >=5.5 does this automatically):
<?php
// 'config/app.php'
return [
// etc…
'providers' => [
// etc…
Ajthinking\Tinx\TinxServiceProvider::class,
// etc…
],
// etc…
];
Usage
From the command line, instead of running php artisan tinker
, run:
php artisan tinx
Reload your Tinker session
To reboot your current session, simply call:
re()
This will allow you to immediately test out your application's code changes.
Aliases: reboot()
, reload()
, restart()
.
To regenerate Composer's optimized autoload files before rebooting your current session, call:
reo()
Calling reo()
simply runs composer dump -o
before re()
, ensuring any new classes added to your codebase since starting Tinx are automatically aliasable/resolvable by Laravel Tinker.
Magic models
Tinx sniffs your models and prepares the following shortcuts:
Example Shortcut | Equals |
---|---|
$u | App\User::first() |
$u_ | App\User::latest()->first() |
$c | App\Models\Car::first() |
u(3) | App\User::find(3) |
u("gmail") | Where "%gmail%" is found in any column. |
u("mail", "jon@snow.com") | App\User::where("mail", "jon@snow.com")->get() |
u("id", ">", 0) | App\User::where("id", ">", 0)->get() |
u() | "App\User" |
u()::whereRaw(...) | App\User::whereRaw(...) // Note: >= PHP 7.0 only |
Naming strategy
Tinx calculates shortcut names via the implementation defined by your strategy
config value.
Lets say you have two models: Car
and Crocodile
.
If your naming strategy
was set to pascal
(default), Tinx would define the following shortcuts in your session:
- Car:
$c
,$c_
,c()
- Crocodile:
$cr
,$cr_
,cr()
Names
The shortcuts defined for your session will display when Tinx loads and on subsequent reloads.
To see your shortcuts at any time during your session, run:
names()
Your shortcuts will initially display only if your session satisfies the names_table_limit
config value.
To filter the shortcuts returned by names()
, simply pass your filter terms like so:
names('car', 'user')
Fast factories
Shortcut methods are a great way to create factory models fast.
// Instead of this…
factory(App\User::class)->create()
// …try substituting a shortcut method, like this:
factory(u())->create()
When tinkering, every keystroke counts!
Configuration
Tinx contains a number of helpful configuration options.
To personalise your Tinx installation, publish its config file by running:
php artisan vendor:publish --provider=Ajthinking\\Tinx\\TinxServiceProvider --force
Once published, edit config/tinx.php
where appropriate to suit your needs:
<?php
// 'config/tinx.php'
return [
/**
* Base paths to search for models (paths ending in '*' search recursively).
* */
'model_paths' => [
'/app',
'/app/Models/*',
// '/also/search/this/directory',
// '/also/search/this/directory/recursively/*',
],
/**
* Only define these models (all other models will be ignored).
* */
'only' => [
// 'App\OnlyThisModel',
// 'App\AlsoOnlyThisModel',
],
/**
* Ignore these models.
* */
'except' => [
// 'App\IgnoreThisModel',
// 'App\AlsoIgnoreThisModel',
],
/**
* Model shortcut naming strategy (e.g. 'App\User' = '$u', '$u_', 'u()').
* Supported values: 'pascal', 'shortestUnique'
* */
'strategy' => 'pascal',
/**
* Alternatively, you may pass a resolvable fully qualified class name
* implementing 'Ajthinking\Tinx\Naming\Strategy'.
* */
// 'strategy' => App\CustomNamingStrategy::class,
/**
* Column name (e.g. 'id', 'created_at') used to determine last model shortcut (i.e. '$u_').
* */
'latest_column' => 'created_at',
/**
* If true, models without database tables will also have shortcuts defined.
* */
'tableless_models' => false,
/**
* Include these file(s) before starting tinker.
* */
'include' => [
// '/include/this/file.php',
// '/also/include/this/file.php',
],
/**
* Show the console 'Class/Shortcuts' table for up to this many model names, otherwise, hide it.
* To always view the 'Class/Shortcuts' table regardless of the model name count,
* pass a 'verbose' flag when booting Tinx (e.g. "php artisan tinx -v"),
* or set this value to '-1'.
* */
'names_table_limit' => 10,
];
Contributing
Please post issues and send PRs.
License
MIT