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.