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.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow