Zoeken…
Invoering
Voorbeelden en goede werkwijzen voor het configureren van uw Symfony-toepassing die niet in de officiële documentatie staan.
Neem alle configuratiebestanden uit een map op
Na een tijdje krijg je veel configuratie-items in je config.yml. Het kan uw configuratie gemakkelijker lezen als u uw configuratie verdeelt over meerdere bestanden. U kunt op deze manier eenvoudig alle bestanden uit een map opnemen:
config.yml:
imports:
- { resource: parameters.yml }
- { resource: "includes/" }
In de map includes
kunt u bijvoorbeeld doctrine.yml, swiftmailer.yml, etc. plaatsen
Gebruik een volledig gekwalificeerde klassenaam (FQCN) als service-ID
In veel voorbeelden vindt u een service-ID zoals 'acme.demo.service.id' (een string met stippen). Uw services.yml
ziet er zo uit:
services:
acme.demo.service.id:
class: Acme\DemoBundle\Services\DemoService
arguments: ["@doctrine.orm.default_entity_manager", "@cache"]
In uw controller kunt u deze service gebruiken:
$service = $this->get('acme.demo.service.id');
Hoewel hier geen probleem mee is, kunt u een FQCN (Fully Qualified Class Name) gebruiken als service-ID:
services:
Acme\DemoBundle\Services\DemoService:
class: Acme\DemoBundle\Services\DemoService
arguments: ["@doctrine.orm.default_entity_manager", "@cache"]
In uw controller kunt u het als volgt gebruiken:
use Acme\DemoBundle\Services\DemoService;
// ..
$this->get(DemoService::class);
Dit maakt uw code beter te begrijpen. In veel gevallen heeft het geen zin om een service-ID te hebben die niet alleen de klassenaam is.
Vanaf Symfony 3.3 kunt u zelfs het kenmerk class
verwijderen als uw service-ID een FQCN is.
Geen HTTP-interface nodig?
Als uw toepassing geen HTTP-interface nodig heeft (bijvoorbeeld voor een app met alleen console), wilt u ten minste Twig
en SensioFrameworkExtra
Geef gewoon commentaar op die regels:
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
U kunt ook de gerelateerde leveranciersvereisten verwijderen uit composer.json :
"sensio/framework-extra-bundle": "x.x.x",
"twig/twig": "x.x"
Het gebruik van Symfony in zo'n geval is betwistbaar, maar het kan in elk geval tijdelijk zijn.