SyMfonAK - vyvíjame databázy pomocou frameworku Symfony

Odporúčané praktiky - konfigurácia

Z SyMfonAK
Prejsť na: navigácia, hľadanie

Symfony dokumentácia → Odporúčané praktiky - konfigurácia


originál dokumentácia

Konfigurácia zahŕňa rôzne oblasti, infraštruktúru, bezpečnosť a tiež rôzne prostredie, vývoj, produkčné prostredie. Symfony odporúča preto rozdeliť konfigurácia na tri časti.

Konfigurácia vzťahujúca sa na infraštruktúru

Súbor .env

Vo vývojovom prostredí použi .env alebo .env.local

# .env
###> doctrine/doctrine-bundle ###
DATABASE_URL=sqlite:///%kernel.project_dir%/var/data/blog.sqlite
###< doctrine/doctrine-bundle ###

###> symfony/swiftmailer-bundle ###
MAILER_URL=smtp://localhost?encryption=ssl&auth_mode=login&username=&password=
###< symfony/swiftmailer-bundle ###

# ...

Tieto nastavenia sa nenachádzajú v config/services.yml, pretože neovplyvňujú funkčnosť systému. Je jedno, kde sa nachádza databáza, a pod.

Pozor, $_ENV, $_SERVER a phpinfo() obsahujú dôležité a citlivé informácie. Dajte pozor, aby ste ich nespristúpnili bežným užívateľom!

Kánonické parametre

Všetky premenné aplikácie treba definovať s súbore .env

Od novembra 2018 je už tento nový systém. Dovtedy bol odlišný, so súborom .env.dist. Je o tom článok


Aplikácie so vzťahom k aplikácii

Nastavenia ovplyvňujúce aplikáciu nastavujte v súbore config/services.yaml

Konštanty verzus konfiguračné parametre

Málo sa meniace hodnoty nastavte ako konštanty a nie parametre systému. Parametre ako napríklad:

# config/services.yaml
parameters:
    homepage.number_of_items: 10

treba nastaviť ako konštantu, napríklad takto:

// src/Entity/Post.php
namespace App\Entity;

class Post
{
    const NUMBER_OF_ITEMS = 10;

    // ...
}

Výhoda: sú prístupné v celej aplikácii! Premenné systému sú prístupné len na miestach s prístupom do kontajnera Symfony.

Konštanty využijete v twig šablónach:

<p>
    Displaying the {{ constant('NUMBER_OF_ITEMS', post) }} most recent results.
</p>

Konštanty sú pristupné v repositároch Doctrine, kde premenné nie:

namespace App\Repository;

use App\Entity\Post;
use Doctrine\ORM\EntityRepository;

class PostRepository extends EntityRepository
{
    public function findLatest($limit = Post::NUMBER_OF_ITEMS)
    {
        // ...
    }
}

Nevýhodou je problematické predefinovanie hodnoty konštanty v testoch.


Náš vlastný príklad


1. v adresári src sme založili adresár Utilities a tam triedu pre konštanty:

<?php
// src/Utilities/Konstanty.php

namespace App\Utilities;

class Konstanty{

    const VERZIA_PRIDAJ = ' ver. 1.4.2';

}
?>

Využitie v twig šablóne:

{{ constant('App\\Utilities\\Konstanty::VERZIA_PRIDAJ') }}



Mená parametrov

Treba, aby boli krátke a používané s prefixom aplikácie.

Zopár ukážok s komentárom:

# config/services.yaml
parameters:
    # toto nie je dobré, príliš všeobecné a nenanznačuje zmysel
    app.dir: '...'
    # takto je to lepšie, jednoduché a naznačuje význam
    app.contents_dir: '...'
    # je v poriadku používať bodky, podčiarkniky
    # potom treba byť nemenný v používanom štýle, systéme
    app.dir.contents: '...'
    app.contents-dir: '...'