Moony
PHP Framework

Get Started

Directory structure

app
app/controllers
app/cron
Cron job files
app/jobs
Jednorázové úkony, třída by měla obsahovat jedinou metodu
invoke
app/views
app/services
Jednotlivé servisy, které provádí logiku aplikace. Neměly by obsahovat práci s daty, to obstarávají repozitáře.
app/repositories
Jakákoli práce s daty patří sem.
assets
css, js, img, fonty atd. Struktura v assets záleží na jednotlivém projektu.
config
Konfigurační soubory production.json a local.json
storage
Uložiště pro ostatní soubory. Jakýkoli file upload či generování cache by mělo jít sem.
storage/lang
Soubory pro jazykové mutace
storage/log
Tracy logs
Entrypoint aplikace je soubor bootstrap.php (není to index.php, kdyby nefungoval .htaccess ať se aplikace nenačte). V tomto souboru se nastavují middlewary a boot classes.

Moony CLI Commands

Pro usnadnění některých úkony je k dispozici moony CLI. Možné argumenty se zobrazí příkazem php moony do konzole.

Pomocí příkazu php moony make command {name} se vytvoří nový command

namespace Moony\bootstrap\core\moony\commands\commands;

use Moony\bootstrap\core\moony\commands\attributes\AsCommand;
use Moony\bootstrap\core\moony\commands\Command;
use Moony\bootstrap\core\moony\commands\Input;
use Moony\bootstrap\core\moony\commands\Output;
use Moony\bootstrap\core\moony\enums\ConsoleColorEnum;

#[AsCommand('', 'Command description')]
class ExampleCommand extends Command
{
    public function execute(Input $input, Output $output)
    {
        $output->writeLine('Command executed successfully', ConsoleColorEnum::GREEN);
    }
}
Jakým příkazem se command spustí se uvádí v prvním parametru atributu [AsCommand('command')].
TIP: V lokálním configu (položka "ideLocation") vyplň přesné umístění .exe binárky na IDE a vytvořený soubor v případě příkazu make se zároveň otevře.
TIP: V metodě execute, parametru $input lze využít metodu validate(), která je stejná jako v Request třídě a lze takto validovat argumenty, viz. create user command.

Tracy panel

Do tracy panelu bylo přidáno Route - údaje o routě, která byla načtená, Moony - Timelapse běhu aplikace


Konvence názvů

Proměnné camelCase
Funkce camelCase
Metody camelCase
Třídy PascalCase
DB Tabulky snake_case
DB Sloupce snake_case
JSON camelCase
const Upper SNAKE_CASE
Language Group PascalCase
Language items PascalCase
View file names kebab-case
CSS kebab-case
$awesomeVariableName = '...';

function awesomeFunctionName() { }

class AwesomeClassName {
    const AWESOME_CONSTANT;

    public function awesomeMethodName(): View
    {
        return new View('./awesome-template-path/awesome-template-file.tpl');
    }
}

{
    "awesomeJsonProperty": [
        "awesomeValue"
    ]
}

.awesome-css-property { color: white; }
    [AwesomeGroupName]
AwesomeLanguageProperty = "..."