2011-12-11 31 views
0

我使用Zend Framework將變量傳遞給控制器​​的視圖腳本。我想知道是否可以預先過濾視圖,以便我可以更改在視圖腳本中檢索變量的方式。更改在Zend Framework視圖腳本中檢索變量的方式

例如。在控制器中,我有:

$this->view->name = 'Bob'; 

並在視圖我有:

echo $this->name; 

其中優秀作品沒有問題的!我想要的是正面有能力改變它,所以我可以使用:

echo $name; 

所以基本上,刪除$ this語句。這可能嗎?我正在製作一個模板,並讓其他設計人員使用該模板系統,並希望使他們更容易,然後始終鍵入$ this-> array->名稱。

我知道在視圖腳本中,我可以簡單地添加:

$name = $this->name; 

但我想這樣做,在控制器的某個地方。

感謝您的諮詢!

+0

如果你想用你的名字簽名消息,改變你的用戶名,不要在實際的職位中包含一行。 :) – mac

回答

2

我會馬上說,我認爲這不是一個好主意,以避免你的視圖的輸出變量的範圍。這通過在全局範圍內暴露視圖的內部結構來抵制框架的MVC模式。但如果你真的堅持這樣的話,在控制器,你也許可以給它們在全球範圍如下:

$GLOBALS['name'] = $this->view->name; 

後來訪問它們作爲$name$GLOBALS['name']

注意:根據視圖的變量何時填充與何時將其分配給控制器,您可能需要分配引用。

$GLOBALS['name'] = &$this->view->name; 
+0

可怕!從技術上講,你寫的東西可能是有道理的。在我看來,它在實踐中會起作用。但是,在那個時候,我會開始問自己......爲什麼要使用MVC框架,當我搞砸了......並且創建了一些不太好的意大利麪條代碼? ;-) – maraspin

+0

@maraspin我認爲這些「足夠的繩索可以讓自己吊死」的答案......希望我對OP的聲明足夠清楚。 –

+0

明白了你的觀點。 ;-)我的評論實際上更多地是爲了反對「陌生」做法的新手,而不是其他任何事情。 – maraspin

1

您的想法是合理的,似乎很容易實現。只是這行添加到您的模板的開頭:

<?php extract(get_object_vars($this)) ?> 

傳遞狀態全局變量的手段來查看可能不被視爲一些是個好主意,但這種方式是安全的,因爲提取創建本地變量,而不是全局變量。

如果你想重新使用這種方法,並且不希望複製&粘貼,你可以很容易地從Zend_View的繼承,介紹了此行的方法(如果我沒有記錯)_run,然後在你的引導:

  • 創建控制器的一個實例,
  • 得到ViewRenderer會(使用Zend_Controller_Action_HelperBroker的靜態方法)
  • 注入您的視圖實例到視圖解析器

這樣你所有的觀點都會將他們的公共屬性作爲變量。

相關問題