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.