Szukaj…


Wprowadzenie

Przykłady i dobre praktyki dotyczące konfigurowania aplikacji Symfony, których nie ma w oficjalnej dokumentacji.

Uwzględnij wszystkie pliki konfiguracyjne z katalogu

Po pewnym czasie pojawia się wiele elementów konfiguracji w pliku config.yml. Może ułatwić odczytanie konfiguracji, jeśli podzielisz konfigurację na wiele plików. W ten sposób możesz łatwo dołączyć wszystkie pliki z katalogu:

config.yml:

imports:
    - { resource: parameters.yml }
    - { resource: "includes/" }

W katalogu includes możesz umieścić np. Doctrine.yml, swiftmailer.yml itp.

Użyj w pełni kwalifikowanej nazwy klasy (FQCN) jako identyfikatora usługi

W wielu przykładach znajdziesz identyfikator usługi, taki jak „acme.demo.service.id” (ciąg z kropkami). You services.yml będzie wyglądać następująco:

services:
    acme.demo.service.id:
        class: Acme\DemoBundle\Services\DemoService
        arguments: ["@doctrine.orm.default_entity_manager", "@cache"]

W kontrolerze możesz skorzystać z tej usługi:

$service = $this->get('acme.demo.service.id');

Chociaż nie ma z tym problemu, możesz użyć w pełni kwalifikowanej nazwy klasy (FQCN) jako identyfikatora usługi:

services:
    Acme\DemoBundle\Services\DemoService:
        class: Acme\DemoBundle\Services\DemoService
        arguments: ["@doctrine.orm.default_entity_manager", "@cache"]

W kontrolerze możesz użyć tego w następujący sposób:

use Acme\DemoBundle\Services\DemoService;
// ..
$this->get(DemoService::class);

Dzięki temu Twój kod jest łatwiejszy do zrozumienia. W wielu przypadkach nie ma sensu mieć identyfikatora usługi, który nie jest tylko nazwą klasy.

Począwszy od Symfony 3.3, możesz nawet usunąć atrybut class jeśli identyfikator usługi to FQCN.

Nie potrzebujesz interfejsu HTTP?

Jeśli twoja aplikacja nie potrzebuje interfejsu HTTP (na przykład dla aplikacji tylko na konsolę), będziesz chciał wyłączyć przynajmniej Twig i SensioFrameworkExtra

Po prostu skomentuj te linie:

app / AppKernel.php

$bundles = [
//...
//    new Symfony\Bundle\TwigBundle\TwigBundle(),
//    new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
//...
if (in_array($this->getEnvironment(), ['dev', 'test'], true)) {
//...
//    $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();

app / config / config.yml

framework:
#    ...
#    router:
#        resource: '%kernel.root_dir%/config/routing.yml'
#        strict_requirements: ~
#    ...
#    templating:
#        engines: ['twig']
#...
#twig:
#    debug: '%kernel.debug%'
#    strict_variables: '%kernel.debug%'

app / config / config_dev.yml

#framework:
#    router:
#        resource: '%kernel.root_dir%/config/routing_dev.yml'
#        strict_requirements: true
#    profiler: { only_exceptions: false }

#web_profiler:
#    toolbar: true
#    intercept_redirects: false

Możesz także usunąć powiązane wymagania dostawcy z composer.json :

"sensio/framework-extra-bundle": "x.x.x",
"twig/twig": "x.x"

Korzystanie z Symfony w ogóle w takim przypadku jest dyskusyjne, ale przynajmniej może być tymczasowe.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow