Sök…


Introduktion

Exempel och god praxis för att konfigurera din Symfony-applikation som inte finns i den officiella dokumentationen.

Inkludera alla konfigurationsfiler från en katalog

Efter ett tag hamnar du med många konfigurationsobjekt i din config.yml. Det kan göra att konfigurationen är lättare att läsa om du delar upp din konfiguration mellan flera filer. Du kan enkelt inkludera alla filer från en katalog på detta sätt:

config.yml:

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

I katalogen includes du lägga till exempel doctrine.yml, swiftmailer.yml, etc.

Använd fullt kvalificerat klassnamn (FQCN) som service-id

I många exempel hittar du ett service-id som 'acme.demo.service.id' (en sträng med prickar). Du services.yml kommer att se ut så här:

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

I din controller kan du använda den här tjänsten:

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

Det finns inga problem med det här, men du kan använda ett fullständigt kvalificerat klassnamn (FQCN) som service-id:

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

I din controller kan du använda den så här:

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

Detta gör din kod bättre att förstå. I många fall är det meningslöst att ha ett service-id som inte bara är klassnamnet.

Från och med Symfony 3.3, kan du även ta bort class attribut om du tjänsten id är en FQCN.

Inga HTTP-gränssnitt behövs?

Om din applikation inte behöver något HTTP-gränssnitt (till exempel för en konsol-app), vill du inaktivera minst Twig och SensioFrameworkExtra

Kommentera bara de raderna:

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

Du kan också ta bort relaterade leverantörskrav från composer.json :

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

Att använda Symfony alls i sådant fall är tveksamt, men åtminstone kan det vara tillfälligt.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow