Ricerca…


introduzione

Esempi e buone pratiche per la configurazione dell'applicazione Symfony non presenti nella documentazione ufficiale.

Include tutti i file di configurazione da una directory

Dopo un po ', si finisce con molti elementi di configurazione in config.yml. Può semplificare la lettura della configurazione se dividi la tua configurazione su più file. Puoi facilmente includere tutti i file da una directory in questo modo:

config.yml:

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

Nella directory includes puoi inserire ad esempio doctrine.yml, swiftmailer.yml, ecc.

Utilizzare il nome di classe completo (FQCN) come id di servizio

In molti esempi, troverai un id di servizio come "acme.demo.service.id" (una stringa con punti). You services.yml sarà simile a questo:

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

Nel tuo controller, puoi utilizzare questo servizio:

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

Anche se non vi è alcun problema con questo, è possibile utilizzare un nome di classe pienamente qualificato (FQCN) come id di servizio:

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

Nel tuo controller puoi usarlo in questo modo:

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

Questo rende il tuo codice più comprensibile. In molti casi non ha senso avere un id di servizio che non sia solo il nome della classe.

A partire da Symfony 3.3, è possibile rimuovere anche l'attributo di class se l'id di servizio è un FQCN.

Non è necessaria l'interfaccia HTTP?

Se la tua applicazione non ha bisogno di alcuna interfaccia HTTP (ad esempio per un'app solo console), dovrai disabilitare almeno Twig e SensioFrameworkExtra

Basta commentare queste righe:

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

È inoltre possibile rimuovere i requisiti del fornitore correlato da composer.json :

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

L'uso di Symfony in questo caso è discutibile, ma almeno può essere temporaneo.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow