2
如何成員的動作裏面設置...Symfony如何將成員在動作中設置爲模板?
$this->foo = 'bar';
...從模板成爲一個變量訪問...
echo $foo; // bar
我想知道它是如何在實現一個框架級別。
關於如何使用Symfony有很多文檔,但我還沒有設法找到關於它如何在幕後(類結構/繼承等)的所有組合。
在此先感謝您的幫助!
如何成員的動作裏面設置...Symfony如何將成員在動作中設置爲模板?
$this->foo = 'bar';
...從模板成爲一個變量訪問...
echo $foo; // bar
我想知道它是如何在實現一個框架級別。
關於如何使用Symfony有很多文檔,但我還沒有設法找到關於它如何在幕後(類結構/繼承等)的所有組合。
在此先感謝您的幫助!
的一般模型是這樣的:
控制器實現__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()
方法創建的變量。
非常好,非常感謝! – chattsm 2010-04-26 10:26:46
我應該提一下,我也不同意symfony在這裏採用的方法。如果實現的API只是說: $ this - > _ view-> addVar($ name,$ value);這將更清晰(並且因爲您問了這個問題就表明了我的觀點)。 該屬性不是控制器;它屬於這個觀點。 – d11wtq 2010-04-26 10:29:33
非常好,謝謝。 – martin 2010-04-27 08:01:51