Skip to content

Konzole a CLI

Konzole podobná logice Symfony Console či Laravel Artisan. Využíváme knihovnu CLImate.

Spuštění

Spustit ji lze pomocí spustitelného skriptu console uloženém v kořenovém adresáři projektu:

./console
php console

Bez příkazu použije list pro výpis všech dostupných skupin a jejich příkazů:

Usage: console [command]

Optional Arguments:
    command
        The command you want to run

Available commands:
  list                                      List commands
 cache
  cache:delete                              Delete the cache
  cache:purge                               Purge the cache
 db
  db:create:page                            Create new page
  db:create:user                            Create new user
 make
  make:cubetype                             Make a new cube type
  make:endpoint                             Make a new endpoint
  make:module                               Make a new admin controller
  make:tag                                  Make a new tag
 sessions
  sessions:purge                            Purge sessions

Struktura příkazů

Jednotlivé příkazy jsou PHP skripty uložené v adresářové struktuře v adresáři app/commands. Příkaz db:create:page spustí php skript app/commands/db/create/page.php.

app/commands/
├── list.php
├── cache/
│   ├── delete.php
│   └── purge.php
├── db/
│   └── create/
│       ├── page.php
│       └── user.php
└── make/
    ├── cubetype.php
    ├── endpoint.php
    ├── module.php
    └── tag.php

Pozn.: Pokud je třeba pomocný adresář pro uložení určitých souborů, použijte první znak adresáře podtržítko (např. app/commands/make/_tag).

Vlastní příkazové skripty

Každý skript má popisek definovaný pomocí poznámky v prvních 1000 znacích skriptu.

Jednoduchý příkaz

sessions:purge - nejjednodušší možnost skriptu, zavolá další skript:

<?php

// @description Purge sessions

declare(strict_types=1);

require DIR . '/app/cron/purge-sessions.php';

Pokročilý příkaz s CLImate

make:tag - plně využívá CLImate a vytváří nový tag se šablonou:

<?php

// @description Make a new tag

declare(strict_types=1);

use Rakit\Validation\Validator;

$climate = new League\CLImate\CLImate;

// tag
do {
    $input = $climate->yellow()->input('Enter tag name (without .php):');
    $response = $input->prompt();
    $message = validation('tag', $response, 'required|regex:/^[a-zA-Z0-9_\-]+$/');
    if ($message) {
        $climate->red($message);
    }
} while ($message);
define('_TAG', $response);

// path
do {
    $input = $climate->yellow()->input('Enter the relative path from app/tags to the tag:');
    $input->defaultTo('');
    $response = $input->prompt();
    $message = validation('path', $response, 'regex:/^[\w\/\.]+$/i');
    if ($message) {
        $climate->red($message);
    }
} while ($message);
define('_PATH', trim($response, '/'));

// template?
$input = $climate->yellow()->confirm('Do you want to use the output .tpl template?');
$input->defaultTo('yes');
define('_TEMPLATE', $input->confirmed());

// recapitulation
$climate->out('');
$padding = $climate->padding(11)->char(' ');
$padding->label('Tag:')->result(_TAG . '.php');
$padding->label('Template:')->result(_TEMPLATE ? _TAG . '.tpl' : 'no');
$padding->label('Path:')->result('/app/tags' . ('/' . _PATH ?: ''));
$climate->out('');

// confirm
$input = $climate->yellow()->confirm('Make?');
$input->defaultTo('yes');
if (!$input->confirmed()) {
    exit;
}

// ... vytváření tagu

Dostupné příkazy

Cache

  • cache:purge - Smaže mezipaměť
  • cache:delete - Vymaže konkrétní klíč z mezipaměti

Database

  • db:create:page - Vytvoří novou stránku v databázi
  • db:create:user - Vytvoří nového admin uživatele

Make

  • make:cubetype - Vytvoří nový typ kostky (cube type)
  • make:endpoint - Vytvoří nový data endpoint
  • make:module - Vytvoří nový admin modul/kontroler
  • make:tag - Vytvoří nový template tag

Sessions

  • sessions:purge - Vymaže všechny sessions

Psaní vlastních příkazů

  1. Vytvořte strukturu adresářů podle názvu příkazu v app/commands/
  2. Vytvořte PHP soubor (bez .php koncovky v příkazu)
  3. Na začátku souboru přidejte comment s popisem: // @description Popis příkazu
  4. Použijte $climate (League CLImate) pro interakci s uživatelem
  5. Pro validaci dat použijte validation() funkci (Rakit)