Как Symfony передает элементы, заданные в действии, шаблону? - PullRequest
2 голосов
/ 26 апреля 2010

Как член устанавливает внутри действия ...

$this->foo = 'bar';

... стать переменной доступной из шаблона ...

echo $foo; // bar

Я хотел бы знать, как это достигается на базовом уровне.

Существует много документации о том, как использовать Symfony, но мне не удалось найти много информации о том, как все это сочетается за кулисами (структура классов / наследование и т. Д.).

Заранее спасибо за помощь!

1 Ответ

4 голосов
/ 26 апреля 2010

Общая модель такова:

Контроллер реализует __set(), который добавляет переменные в представление:

class Controller {
  .. snip ..
  public function __set($key, $value) {
    $this->_view->addVar($key, $value);
  }
  .. snip ..
}

Представление использует extract() (или другой подходящий подход, такой как переменные-переменные) для создания переменных в области действия из этих значений:

class View {
  private $_vars = array();
  private $_templatePath;
  public function __construct($templatePath) {
    $this->_templatePath = $templatePath;
  }
  public function addVar($key, $value) {
    $this->_vars[$key] = $value;
  }
  public function render() {
    extract($this->_vars);
    include $this->_templatePath;
  }
}

Из-за того, как PHP обрабатывает область видимости, шаблон имеет доступ к переменным, созданным методом render() представления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...