// C:\Program Files\Git\bin\bash.exe
Symfony template
Tento template je vhodné si naklonovat rovnou už v GitLabu, protože projekt už bude mít pojmenování podle vašeho přání. Součástí template je i konfigurace DOCKERU.
Import do nového projektu krok 1
Zde vybereme "Import projekt".
Import do nového projektu krok 2
Zde vybereme "Repo by URL.
Import do nového projektu krok 3
Vyplnění údajů pro import template do vašeho nového projektu:
1, Git repository URL - URL zdrojového repozitáře (můj template)
2, Username (optional) - vaše přihlašovací jméno
3, Password (optional) - vaše přihlašovací heslo
4, Project name - jméno nového projektu
5, Visibility Level - viditelnost projektu
Nastavení xdebug
Nastavení debug a portů:
Nastavení cesty k projektu a uvnitř kontejneru:
Základní příkazy pro konfiguraci kontejneru
Build image - new
Vendor zůstavá v kontejneru, ale je zamezena synchronizace. Po spusteni app_build.sh se na lokální disk udelá kopie aby vendor byl viděn editorem.
app_build.sh
na mac a linux budete muset na sh script nastavit prava chmod 755 app_build.sh a post_build.sh
Build image
docker-compose build
Toto by melo stahnout a nastavit vše potřebné
Sestaveni a spustení kontejneru
docker-compose up -d nebo
docker-compose up -d --build
V tuto chvili by mel byt docker projekt ready na http://localhost:82 viz soubor docker-compose.yml, kde to jde i změnit. --build používáme pro přegenerování image kontejneru.
http://localhost:82
ukončení kontejneru
docker-compose down
Potom je možné i na stejný port spustit jiný kontejner.
SQL databáze a adminer
Součásti konfigurace je SQL databáze a phpmyadmin a adminer. Najdeme jí na url:
Phpmyadmin
http://localhost:822
Adminer
http://localhost:823
Databáze mezi kontejnery je na portu 3306 viz soubor docker-compose.yml. Není potřeba psát do připojení k databázi IP a port. Stačí název service ze souboru docker-compose.yml vč. jména root a hesla.
mysql
Neukládejte na Gitlab soubory DB, pouze sql dump. Jedná se o adresář ./data/database, který musí zůstat git ignore.
Konfigurace routování
Konfigurace routování, směrování je aktuálně v template nastaveno přes anotace u jednotlivých method Controlleru, kde se nastavuje obsluhovaná URL a pojmenovává routa.
/**
* @param Request $request
* @param ManagerRegistry $doctrine
* @return Response
*/
#[Route('/form-add/{id}', defaults={"id" = null}, name="homepage_default")]
public function formAdd(string $id = null, Request $request, ManagerRegistry $doctrine): Response
{
Šablonovací systém "Twig"
Šablony jsou v adresáři templates a pojmenování má formát nazevsablony.html.twig. Když je šablona v podadresáří, voláme nazevadresare.nazevsablony.html.twig.
dědění layoutové šablony:
{% extends 'base.html.twig' %}
označení bloku html contentu, co se includuje podle příslušné akce controlleru do layoutu:
{% block body %}
// nejaké html pro content
{% endblock %}
příklad vložení contentu jednotlivých stránek do layoutu:
{% block body %}
{% endblock %}
pro případ vložení nějakého js nebo css konkrétní stránky do layoutu:
{% block css %}
{% endblock %}
{% block js %}
{% endblock %}
příklad výpisu proměnné v layoutu:
{{ id }}
příklad generování odkazu na pojmenovanou routu, kterou vložíme třeba do href html tagu a pod:
{{ path('homepage_detail') }}
příklad vložení části stránky:
{% include 'navbar.html.twig' %}
vložení js nebo css z příslušné šablony do layoutu:
{% block css %}
{% endblock %}
{% block js %}
{% endblock %}
příklad podmínky v layoutu:
{% if data is iterable %}
{% endif %}
příklad cyklu v layoutu:
{% for key, value in data %}
{{ value.street }} // přístup v poli v cyklu
{% if loop.last %} // v cyklu můžeme použít i iterátor.
<hr style="border: 1px solid red">
{% endif %}
{% endfor %}
Vypsání formuláře v šabloně
{{ form(form) }}
Nastavení přístupu k DB přes doctrine
Nastavujeme v souboru env na root webu
DATABASE_URL="mysql://pokus:pokus@mysqldb:3306/pokus?serverVersion=mariadb-10.7.3&charset=utf8mb4"
Základní příkazy pro doctrine
Příkazy zadáváme v docker containeru
vypiše seznam příkazů
php bin/console list make
vytvoreni entity
php bin/console make:entity
Pro relaci v průvodci vytvoříme "type relation"
php bin/console make:migration
Připraví sql k migraci
php bin/console doctrine:migrations:migrate
Vytvoří tabulky v DB
vytvoření entit z existující tabulky
php bin/console doctrine:mapping:import "App\Entity" annotation --path=src/Entity
Prvním krokem k vytvoření tříd entit z existující databáze je požádat Doctrine, aby si databázi prohlédla a vygenerovala odpovídající soubory metadat. Soubory metadat popisují třídu entity, která se má generovat na základě polí tabulky.
Tento nástroj příkazového řádku žádá Doctrinu, aby prozkoumala databázi a vygenerovala nové třídy PHP s metadaty anotací do src/Entity. Tím se vygenerují dva soubory: BlogPost.phpa BlogComment.php.
úpravy existujících entit
php bin/console make:entity --regenerate
Regeneruje entity
php bin/console make:migration
Připraví sql k migraci
php bin/console doctrine:migrations:migrate
Vytvoří/upraví tabulky v DB
bin/console doctrine:migrations:sync-metadata-storage
Synchronizuje metadata
všechny příkazy
doctrine:migrations:current [aktuální] Vypíše aktuální verzi.
doctrine:migrations:diff [diff] Vygenerujte migraci porovnáním vaší aktuální databáze s vašimi mapovacími informacemi.
doctrine:migrations:dump-schema [schéma výpisu] Vypište schéma pro vaši databázi do migrace.
doctrine:migrations:execute [execute] Manuální spuštění jedné verze migrace nahoru nebo dolů.
octrine:migrations:generate [generate] Vygeneruje prázdnou třídu migrace.
doctrine:migrations:latest [latest] Vypíše číslo nejnovější verze
doctrine:migrations:migrate [migrate] Proveďte migraci na zadanou verzi nebo na nejnovější dostupnou verzi.
doctrine:migrations:rollup [souhrnná] Shrňte migrace odstraněním všech sledovaných verzí a vložením jediné verze, která existuje.
doctrine:migrations:status [stav] Zobrazení stavu sady migrací.
doctrine:migrations:up-to-date [up-to-date] Řekne vám, zda je vaše schéma aktuální.
doctrine:migrations:version [verze] Ručně přidat a odstranit verze migrace z tabulky verzí.
doctrine:migrations:sync-metadata-storage [sync-metadata-storage] Zajišťuje, že úložiště metadat je v nejnovější verzi.
doctrine:migrations:list [list-migrations] Zobrazí seznam všech dostupných migrací a jejich stav.
Základní příkazy a metody pro tvorbu formulářu
Příkazy zadáváme v docker containeru
php bin/console make:form
V prvním kroku zadáme název formuláře a ve druhém kroku název entity, ze které bude formulář vygenerován. Vygeneruje nám to formulář, který bude potřeba dále dodělat. Formulář se vygeneruje do adresáře src/Form/NazevFormulareFormType.php V metodě "build" provedeme úprqvy.
Příklad vygenerovaného formulářového elementu:
Můžeme v jednotlivých elementech nastavovat např. required, class pro stylování, validaci elementu a počet znaků, které je možné do elementu vyplnit. Název elementu nebo typ. Náš vzorový element se jmenuje "street", a je typ "Textarea".
->add('street', TextareaType::class, ['required' => true,
'row_attr' => ['class' => 'form-group is-invalid'],
'attr' => ['maxlength' => 4
//, 'novalidate' => 'novalidate']
]])
Příklad manuální úpravy formulářů:
U formulářů můžeme např. nastavit i třidy css pro html, omezit počet znaků v elementu a vypnout nebo zapnout validaci.
'required' => true // nutno vyplnit
'row_attr' => ['class' => 'form-group is-invalid'] // príklad nastavení dvou class v html
'novalidate' => 'novalidate' // vypnutí validace
'attr' => ['maxlength' => 4 // maximální počet znaků v elementu
'placeholder' => '--- Vyber mesto ---' // příklad placeholder
'label' => 'Mesto'
'row_attr' => ['class' => 'form-group is-invalid',]
'label_attr' => ['class' => 'mt-4'] // nastavení html class pro popisek formuláře
Příklad nastavení formulářového elementu, název a typ elementu.
>add('street', TextareaType::class // element se jmenuje "street" a typ je textarea
V případě, že entita ze které byla tabulka generována má relaci do jiné tabulky a je potřeba input select, upravíme element takto. Příklad pro relaci do tabulky Cities
->add('cities', EntityType::class, [
'placeholder' => '--- Vyber mesto ---',
'class' => Cities::class,
'choice_label' => 'name',
'required' => true,
'label' => 'Mesto',
'row_attr' => ['class' => 'form-group is-invalid',],
'label_attr' => ['class' => 'mt-4'],
// 'attr' => ['maxlength' => 4]
])
Vytvoření formuláře v Controleru v příslušné akci
$form = $this->createForm(AddressFormType::class, $Eaddress,
[
'action' => $this->generateUrl('homepage_form_add'),
'method' => 'POST'
])->handleRequest($request);
Metody pro kontrolu stavu odeslání a validity formuláře
$form->isSubmitted()
$form->isValid()
Uložení do zprávy flash messages
$this->addFlash("success", 'Data ulozena');
Přesměrování na jinou stránku po uložení dat.
return $this->redirect($this->generateUrl('homepage_default'));
Příklad zpracování po odesláhní formuláře
public function formAgg(string $id = null, Request $request, ManagerRegistry $doctrine): Response
// ziskani dat z formulare
$data = $form->getData();
$em = $doctrine->getManager();
$em->persist($data);
$em->flush();
CHYBA - Object of class could not be converted to String
public function __toString()
{
return $this->entreprise_nom;
}