2010-04-26 53 views
2

如何成員的動作裏面設置...Symfony如何將成員在動作中設置爲模板?

$this->foo = 'bar'; 

...從模板成爲一個變量訪問...

echo $foo; // bar 

我想知道它是如何在實現一個框架級別。

關於如何使用Symfony有很多文檔,但我還沒有設法找到關於它如何在幕後(類結構/繼承等)的所有組合。

在此先感謝您的幫助!

回答

4

的一般模型是這樣的:

控制器實現__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()方法創建的變量。

+0

非常好,非常感謝! – chattsm 2010-04-26 10:26:46

+0

我應該提一下,我也不同意symfony在這裏採用的方法。如果實現的API只是說: $ this - > _ view-> addVar($ name,$ value);這將更清晰(並且因爲您問了這個問題就表明了我的觀點)。 該屬性不是控制器;它屬於這個觀點。 – d11wtq 2010-04-26 10:29:33

+0

非常好,謝謝。 – martin 2010-04-27 08:01:51

相關問題