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.