Szukaj…
Wprowadzenie
Przykłady i dobre praktyki dotyczące konfigurowania aplikacji Symfony, których nie ma w oficjalnej dokumentacji.
Uwzględnij wszystkie pliki konfiguracyjne z katalogu
Po pewnym czasie pojawia się wiele elementów konfiguracji w pliku config.yml. Może ułatwić odczytanie konfiguracji, jeśli podzielisz konfigurację na wiele plików. W ten sposób możesz łatwo dołączyć wszystkie pliki z katalogu:
config.yml:
imports:
- { resource: parameters.yml }
- { resource: "includes/" }
W katalogu includes
możesz umieścić np. Doctrine.yml, swiftmailer.yml itp.
Użyj w pełni kwalifikowanej nazwy klasy (FQCN) jako identyfikatora usługi
W wielu przykładach znajdziesz identyfikator usługi, taki jak „acme.demo.service.id” (ciąg z kropkami). You services.yml
będzie wyglądać następująco:
services:
acme.demo.service.id:
class: Acme\DemoBundle\Services\DemoService
arguments: ["@doctrine.orm.default_entity_manager", "@cache"]
W kontrolerze możesz skorzystać z tej usługi:
$service = $this->get('acme.demo.service.id');
Chociaż nie ma z tym problemu, możesz użyć w pełni kwalifikowanej nazwy klasy (FQCN) jako identyfikatora usługi:
services:
Acme\DemoBundle\Services\DemoService:
class: Acme\DemoBundle\Services\DemoService
arguments: ["@doctrine.orm.default_entity_manager", "@cache"]
W kontrolerze możesz użyć tego w następujący sposób:
use Acme\DemoBundle\Services\DemoService;
// ..
$this->get(DemoService::class);
Dzięki temu Twój kod jest łatwiejszy do zrozumienia. W wielu przypadkach nie ma sensu mieć identyfikatora usługi, który nie jest tylko nazwą klasy.
Począwszy od Symfony 3.3, możesz nawet usunąć atrybut class
jeśli identyfikator usługi to FQCN.
Nie potrzebujesz interfejsu HTTP?
Jeśli twoja aplikacja nie potrzebuje interfejsu HTTP (na przykład dla aplikacji tylko na konsolę), będziesz chciał wyłączyć przynajmniej Twig
i SensioFrameworkExtra
Po prostu skomentuj te linie:
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
Możesz także usunąć powiązane wymagania dostawcy z composer.json :
"sensio/framework-extra-bundle": "x.x.x",
"twig/twig": "x.x"
Korzystanie z Symfony w ogóle w takim przypadku jest dyskusyjne, ale przynajmniej może być tymczasowe.