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.php→auth:inviteapp/commands/db/create/user.php→db:create:userapp/cron/sitemap.php→cron: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:
- legacy skript s
@description - 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/*.phpjakocron:*
Popis bere:
- z
@description - nebo z klíče
'description' => '...'
Prakticky důležité příkazy
auth:invitepošle passkey invite přes centrální auth servermake:commandvytvoří nový CLI v2 příkazmake:cubetypescaffoldne nový cube typemake:modulescaffoldne nový admin modul vapp/Modules/make:tagvytvoří nový template tagvalidate:data-yamlkontrolujedata.yamlDSL
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.yamllisting.tplrouter.phpneboroutes.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