Symfony2 - Methoden für alle Controller - php, symfony

Beim Entwickeln meiner Symfony2-Anwendung möchte ich, wie in Ruby on Rails, Methoden in allen Controllern verfügbar machen. In RoR-Controllern erben Sie einfach nach ApplicationController und hier setzen Sie alle Methoden ein. Aber was ist der Symfony-Weg, was ist hier eine gute Übung?

Funktionalität, die ich möchte, ist eigentlich sehr einfach, etwas ähnliches:

public function showAction()
{
$user = $this->container->get("security.context")->getToken()->getUser();
}

Ich kann den aktuellen Benutzer hier laden, und ich möchte, dass diese Funktion vor jeder Aktion beendet wird, ohne natürlich den Code in jeden einzelnen Controller zu kopieren.

Antworten:

6 für die Antwort № 1

Sie können Dienste dafür verwenden.

Acme / DemoBundle / MeinService / MeineService.php

<?php
namespace Acme/DemoBundle/MyService

class MyService {

public function myFunction(){
[...]
}

}

Acme / DemoBundle / Ressourcen / config / services.yml

services:
my_service:
class: Acme/DemoBundle/MyService/MyService

Oder .xml-Version

Acme / DemoBundle / Ressourcen / config / services.xml

<?xml version="1.0" encoding="utf-8" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services
http://symfony.com/schema/dic/services/services-1.0.xsd"
>
<services>
<service id="my_service" class="AcmeDemoBundleMyServiceMyService">

</service>
</services>
</container>

Dann in einem Controller

Acme / DemoBundle / Controller / MyController.php

$this->container->get("my_service")->myFunction();

Um es in allen Ihren Bundles verfügbar zu machen, aktualisieren Sie die Dienstkonfigurationsdatei jedes Pakets entsprechend.

Dokumentation ist hier verfügbar


Speisekarte