Symfony 2: dependency injection und Merkmale

Ich versuche einen Weg zu finden, verwenden Sie das Symfony 2 Dependency Injection-Komponente mit der neuen PHP 5.4 Merkmale.

Um eine lange Geschichte kurz (nicht so kurz ist, eigentlich), mein Projekt hat entkoppelt View-Klassen, die alle Ihre eigenen, speziellen Konstruktor. Jede Ansicht kann null oder mehr Helferlein, sind definiert als Merkmale:

trait TranslatorHelper
{
    /**
     * @var Translator
     */
    protected $translator;

    /**
     * @param Translator $translator
     */
    protected function setTranslator(Translator $translator)
    {
        $this->translator = $translator;
    }

    /**
     * @param string $text
     * @return string
     */
    public function translate($text)
    {
        return $this->translator->translate($text);
    }
}

-

class UserEditView extends AbstractView
{
    use TranslatorHelper;

    public function __construct(User $user, UserEditForm $form)
    {
        //...
    }
}

Ich würde gerne eine Methode in meinem controller renderView(), führt, dass die setter-injection, basierend auf alle Merkmale verwendet, die von der View-Klasse, vor dem Rendern der Ansicht:

class Controller
{
    public function renderView(View $view)
    {
        //Check what traits are used by $view, and inject their dependencies
        //{...}


        //Then render the View
        return $view->render();
    }
}

Jede Idee, wie dies zu tun mit der DependencyInjection Komponente?

Das Hauptproblem ist offensichtlich, dass die Ansichten nicht erstellt werden, indem die DI-container, sondern kann überall erstellt werden, in die Anwendung fließen. Es ist nur, bevor Sie gerendert werden, dass die Abhängigkeiten injiziert werden müssen.

Einen letzten Hinweis: ich bin nicht gebunden an das Symfony Komponente. Alle führen auf eine andere DI-container würde geschätzt werden, wie gut.

  • Sie können versuchen, DI mit AOP: github.com/schmittjoh/JMSAopBundle/blob/master/Resources/doc/..., um automatisch injizieren services von annotataion von Eigenschaften und Argumente.
  • Das problem ist, dass ich wollte, dass die Helferlein (wie TranslatorHelper) generische, also ideal, sollten Sie nicht enthalten die Projekt-spezifische id der Abhängigkeiten in den container.
InformationsquelleAutor Benjamin | 2012-07-13
Schreibe einen Kommentar