Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

https://github.com/furey/tinx

⛔️ Laravel Tinx is archived and no longer maintained.
https://github.com/furey/tinx

archived deprecated laravel laravel-tinker obsolete php tinker

Last synced: 2 months ago
JSON representation

⛔️ Laravel Tinx is archived and no longer maintained.

Lists

README

        

# ⛔️ Laravel Tinx (Deprecated)

[![No Maintenance Intended](./readme/unmaintained.svg)](http://unmaintained.tech/)

**Laravel Tinx** was archived on 12th December 2019 and is no longer maintained.

Looking for a reloadable version of [Laravel Tinker](https://github.com/laravel/tinker)?

Save the following script as `tinx.sh` to your project root directory:

```bash
#!/bin/sh
while true; do php artisan tinker; done
```

Run the script to launch a reloadable version of Tinker:

```console
$ . tinx.sh
```

While your Tinker session is running, press:

- Ctrl + D from an empty prompt to **reload** your session
- Ctrl + C to **exit** your session

Can't see newly created classes in Tinker?

Exit your Tinker session and run:

```console
$ composer dump -o
```

Thanks for loving [Laravel](https://laravel.com), and thanks for digging Tinx.

Happy coding!

🤓👋

---

# Laravel Tinx

[Laravel Tinker](https://github.com/laravel/tinker), re()loaded.

Reload your session from inside Tinker, plus magic shortcuts for first(), find(), where(), and more!

## Contents

- [Installation](#installation)
- [Usage](#usage)
* [Reload your Tinker session](#reload-your-tinker-session)
* [Magic models](#magic-models)
* [Naming strategy](#naming-strategy)
* [Names](#names)
* [Fast factories](#fast-factories)
- [Configuration](#configuration)
- [Contributing](#contributing)
- [License](#license)

## Installation

To install Tinx, simply require it via Composer:

```bash
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](https://laravel.com/docs/5.5/packages#package-discovery)):

```php
[
// 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", "[email protected]")` | `App\User::where("mail", "[email protected]")->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.

```php
// 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
[
'/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