2011-12-01 51 views
0

我對CakePHP和MVC的思維方式頗爲陌生。CakePHP過濾器組件 - 正確使用過濾一段時間

知道我能夠通過Nik Chankov成功使用濾鏡組件創建Resultsetfiltering。

我使用它的方式是在我的Controller中調用它,保存條件語句並將它傳遞給我的Paginator。

現在,我有一列保存'created_at'日期,我想讓用戶輸入開始日期和結束日期並將其傳遞給過濾器組件。

我試着創建兩個輸入字段'created_after'和'created_before',並將它們連接到我的控制器中的數組[[created_at] [BETWEEN],因爲過濾組件處理'BETWEEN'。不幸的是,如果我將原始值created_before和_after取消設置,那麼它們將不會被過濾器組件保存到會話中,如果我沒有,我會得到一個SQL錯誤,因爲組件會創建一個語句,包括'created_after'和created_before'這在我的數據庫中沒有定義。

這樣做的正確方法是什麼?請給我建議如何以及在哪個方向我應該着手解決這個問題...

回答

0

理想情況下,您應該添加邏輯到您的模型,以防止這種類型的控制器濫用。

您可以在模型中訪問預定義的回調函數,以在執行搜索之前更改請求數據。這聽起來像你想添加一些邏輯到beforeFind()方法。

食譜:http://book.cakephp.org/view/1049/beforeFind API:http://api13.cakephp.org/class/model#method-ModelbeforeFind

沒有一個代碼示例,很難提出準確的解決方案,但這樣的事情:

// app/models/yourmodel.php 
beforeFind() { 
    if(/*yourlogic*/) { 
     unset($queryData['yourmodel']['created_after']; 
     unset($queryData['yourmodel']['created_after']; 
    } 
}