Получение экземпляра Silex \ Application - PullRequest
2 голосов
/ 08 декабря 2011

Я создаю приложение с Silex и мне было интересно, можно ли каким-то образом получить экземпляр Silex\Application в месте, где я не могу сделать method_name(Application $application) в параметрах метода?

Например, скажем, у меня есть закрытый метод на контроллере, который не является действием. Если я добавлю Application $application в качестве параметра, он выдаст ошибку, говорящую, что мне нужно передать его.

Я бы предпочел не передавать этот метод вручную, если мне не нужно.

Ответы [ 2 ]

4 голосов
/ 08 декабря 2011

На самом деле есть только два способа сделать это.

a) Передать Silex\Application в качестве аргумента конструктору вашего класса и назначить его в качестве переменной экземпляра.

b) PassSilex\Application для вашего частного метода в качестве аргумента от руки.

Вы уверены, что вам нужно полное приложение в вашем классе?Точка внедрения зависимости заключается в непосредственном внедрении зависимостей вместо внедрения контейнера (да, Silex\Application extends \Pimple, который является контейнером внедрения зависимостей.

2 голосов
/ 18 июня 2013

Из вашего комментария к другому ответу ваша цель попасть в Silex / Application - попасть туда в сервис Twig. Я решил использовать текущее приложение в другой функции для моих проектов Silex:

use \Silex\Application;
use \Symfony\Component\HttpFoundation\Request;

class myController {
  private $a;

  // Route defined as:
  // $app->get('/foo', 'myController::showPage');
  public function showPage(Application $a) {
    $this->a = $a;
    return $this->doAwesome();
  }

  private function doAwesome() {
    $twig = $this->a['twig'];
    return $twig->render('awesomePage.twig');
  }
}

Каждая функция, являющаяся конечной точкой для маршрута, затем сохраняет приложение, переданное ему, как свойство класса, для доступа к другим функциям. Это означает, что вы должны помнить о необходимости делать $this->a = $a; в каждой функции, которая использует doAwesome() ( до вызова doAwesome()), но это самый чистый способ, которым я придумал для решения этой проблемы.

...