2010-09-13 59 views
2

甲提交了關於我的網站表格修改單個參數返回請求的數據的數組,它是與Zend框架 - 如何從請求對象

$data = $this->getRequest(); 

這發生在採集到的數據,然後控制器可訪問的將此數組傳遞給我的模型,以便將其放入/更新到數據庫中。

這是問題所在。如果我想操作該數組中的某個值,該怎麼辦?以前我會提取每個值,將它們分配給一個新的數組,以便我能夠處理所需的數據。像這樣:

$data = $this->getRequest(); 
$foo['site_id'] = $data->getParam('site_id'); 
$foo['story'] = htmlentities($data->getParam('story')); 

然後我將$ foo數組傳遞給模型,以便將數據放入/更新到數據庫中。

我所做的只是操縱那一個值('story' param),因此看起來像浪費一個東西,然後重新分配,這樣我就可以做到這一點。另外,它不夠靈活,因爲我必須按名稱顯式訪問每個值。將整個請求傳遞給模型然後去掉數據庫不需要的東西會更好。

你會如何做到這一點?

+0

我很困惑 - 模型(s)應該無法訪問/不應該關心請求對象... – 2010-09-14 00:13:43

+0

請求由控制器處理,而不是模型。它獲取發佈的數據,然後將其發送到模型,以便它可以在數據庫中更新。所有上面的代碼都在控制器中,模型只執行'$ model-> update($ data);' – Lothar 2010-09-14 01:03:16

回答

2

再次編輯:再看看你的問題我在這裏討論的內容都在控制器中進行。你的表單的行動將落地。

那麼你有幾個選項。

首先$_GET仍然存在於ZF中,因此您可以訪問它。

二有:

$myArray = $this->_request->getParams(); 

$myArray = $this->getRequest()->getParams(); 

WICH將返回所有PARAMS在陣列中,而不是一個接一個。

第三,如果形式張貼您有:

$myArray = $this->_request()->getPost(); 

至極的作品,如果用某種形式張貼$this->_request->isPost()至極返回true。

關於訪問所有在你看來,你總是可以只在控制器:

$this->view->myArray = $this->_request->getParams(); 

編輯:好吧,我教你的意思是不是視圖模型。我想我不明白這個問題的一部分。

如果你想對付你的模型只是內部發布數據:

$MyModel = new Model_Mymodels(); 

$data = $this->_request->getParams(); 
$data['story'] = htmlentities($data['story']); 
$myModels->SetItAll($data); 

然後你的模型內創建SetItAll()函數(一個更好的名字),並處理它那裏。

編輯:哦等等!我知道了。你討厭用你的技術逐個輸入你的輸入。那麼我告訴你如何訪問這些數據應該簡化你的生活。

編輯: 如果參數確實來自表單,那麼始終存在Zend_Form路由。您可以創建代碼將其與您的模型連接,並從控制器中抽取所有這些代碼。但是在一天結束時,如果你需要爲你的輸入做一些特殊的事情,那麼你必須在某個地方編碼。

+0

+1 - 如果您絕對需要模型中的請求,我想您可以這樣做。 OTOH只有動作控制器應該真的在玩這個請求。 – 2010-09-14 00:49:47

+0

@Billy ONeal是啊,我真的在談論控制器的行爲。花了我一段時間才明白他可能直接訪問了他的模型中的所有內容。但我發佈了一個將這些數據傳遞給他的模型的例子。感謝您的投票! – Iznogood 2010-09-14 00:53:49

+0

這一切都發生在控制器中。我只是將最終結果傳回給模型,以便它可以更新數據庫。 – Lothar 2010-09-14 01:01:30