Suche…


Einführung

Beispiele und bewährte Methoden für die Konfiguration Ihrer Symfony-Anwendung, die nicht in der offiziellen Dokumentation enthalten sind.

Alle Konfigurationsdateien aus einem Verzeichnis einschließen

Nach einer Weile erhalten Sie viele Konfigurationselemente in Ihrer config.yml. Dadurch können Sie die Konfiguration leichter lesen, wenn Sie Ihre Konfiguration auf mehrere Dateien aufteilen. Sie können auf einfache Weise alle Dateien aus einem Verzeichnis einschließen:

config.yml:

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

Im includes Verzeichnis können Sie zum Beispiel doctrine.yml setzen, swiftmailer.yml usw.

Verwenden Sie einen vollqualifizierten Klassennamen (FQCN) als Service-ID

In vielen Beispielen finden Sie eine Service-ID wie 'acme.demo.service.id' (eine Zeichenfolge mit Punkten). Ihr services.yml wird so aussehen:

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

In Ihrem Controller können Sie diesen Dienst verwenden:

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

Es gibt zwar kein Problem damit, Sie können jedoch einen vollständig qualifizierten Klassennamen (FQCN) als Service-ID verwenden:

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

In Ihrem Controller können Sie es so verwenden:

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

Dies macht Ihren Code besser zu verstehen. In vielen Fällen macht es keinen Sinn, eine Service-ID zu haben, die nicht nur der Klassenname ist.

Ab Symfony 3.3 können Sie das class sogar entfernen, wenn die Service-ID ein FQCN ist.

Keine HTTP-Schnittstelle nötig?

Wenn Ihre Anwendung keine HTTP-Schnittstelle benötigt (z. B. für eine Konsolen-App), sollten Sie mindestens Twig und SensioFrameworkExtra deaktivieren

Kommentieren Sie einfach diese Zeilen aus:

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

Sie können die entsprechenden Lieferantenanforderungen auch aus composer.json entfernen:

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

Die Verwendung von Symfony in einem solchen Fall ist durchaus umstritten, kann aber zumindest vorübergehend sein.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow