Skip to content

Konzole a CLI

Petrovo CMS má vlastní CLI nad skriptem ./console. Příkazy jsou definované jako PHP soubory v app/commands/, cron skripty se mapují z app/cron/ pod prefix cron:.

Spuštění

./console
./console list
./console list --raw
./console <prikaz>
./console <prikaz> --help

Bez argumentu se použije list.

Aktuálně dostupné příkazy

 auth
  auth:invite                               Send passkey invite to an email via auth.mscms.cz
 category
  category:create                           Create category for all languages
  category:delete                           Delete all categories and cleanup
  category:faker                            Generate fake categories (3 per group)
 cron
  cron:clear-cache                          Clear cache completely
  cron:clear-rain                           Clear rain completely
  cron:indexing                             Index website
  cron:purge-cache                          Purge the cache
  cron:purge-sessions                       Purge sessions
  cron:sitemap                              Generate sitemap
 db
  db:create:page                            Create new page
  db:create:user                            Create new user
 demo
  demo:hello                                Say hello (demo command)
 gallery
  gallery:delete                            Delete all galleries and cleanup
  gallery:faker                             Generate fake galleries with photos for testing
 list
  list                                      List available commands
 make
  make:command                              Create a new CLI v2 command
  make:cubetype                             Make a new cube type
  make:module                               Create new admin module (Controller, Service, ListService, routes, listing)
  make:tag                                  Make a new website tag
 menu
  menu:delete                               Delete all menus and cleanup
  menu:faker                                Generate fake menu: 5 continents → 2-3 countries → 2-3 cities
 news
  news:category                             Create news category for all languages
  news:delete                               Delete all news articles and cleanup
  news:faker                                Generate fake news articles for testing
  news:tag                                  Create news tag for all languages
 translation
  translation:scanner                       Find and add new translations from source files
 validate
  validate:data-yaml                        Validate data.yaml DSL files (rules: ai/data-yaml-rules.md)

Kde příkazy leží

app/commands/
├── auth/
│   └── invite.php
├── category/
├── db/
│   └── create/
├── gallery/
├── make/
├── menu/
├── news/
├── translation/
├── validate/
└── list.php

app/cron/
├── clear-cache.php
├── clear-rain.php
├── indexing.php
├── purge-cache.php
├── purge-sessions.php
└── sitemap.php

Mapování:

  • app/commands/auth/invite.phpauth:invite
  • app/commands/db/create/user.phpdb:create:user
  • app/cron/sitemap.phpcron:sitemap

Adresáře začínající _ se při scanování příkazů přeskočí a slouží typicky pro scaffolding šablony.

Dva formáty příkazů

Projekt podporuje dva styly:

  1. legacy skript s @description
  2. CLI v2 formát vracející pole s definicí příkazu

Legacy příkaz

<?php

// @description Purge sessions

declare(strict_types=1);

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

CLI v2 příkaz

<?php
declare(strict_types=1);

return [
    'description' => 'Krátký popis příkazu',

    'arguments' => [
        'name' => [
            'type' => 'string',
            'default' => 'World',
            'required' => false,
        ],
    ],

    'options' => [
        '--force' => ['type' => 'bool'],
        '--output' => ['type' => 'string', 'default' => 'json'],
    ],

    'run' => function (array $args, array $opts, object $cli, array $app) {
        $name = $args['name'];

        if ($opts['--force']) {
            $cli->success("Forcing operation");
        }

        $cli->out("Hello, $name!");
        exit(0);
    },
];

Jak funguje list

list prochází:

  • app/commands/ rekurzivně
  • app/cron/*.php jako cron:*

Popis bere:

  • z @description
  • nebo z klíče 'description' => '...'

Prakticky důležité příkazy

  • auth:invite pošle passkey invite přes centrální auth server
  • make:command vytvoří nový CLI v2 příkaz
  • make:cubetype scaffoldne nový cube type
  • make:module scaffoldne nový admin modul v app/Modules/
  • make:tag vytvoří nový template tag
  • validate:data-yaml kontroluje data.yaml DSL

make:module

make:module dnes scaffoldne současnou modulární strukturu, ne staré app/admin/modules.

Výstup typicky obsahuje:

  • controller
  • service
  • list service
  • data.yaml
  • listing.tpl
  • router.php nebo routes.php

Navíc:

  • doplní admin menu
  • založí odpovídající permission v DB
  • u submodulu připojí route do rodičovského router.php

Doporučení

  • pro nové příkazy preferuj CLI v2 formát
  • cron skripty udržuj spustitelné i samostatně, bez závislosti na CLI helperu
  • pokud je příkaz jen wrapper kolem cron skriptu, je to v pořádku