我最後使用的Symfony
public function executeIndex {
...
// Add a form to filter results
$this->form = new MyModuleForm();
}
生成的默認MyModuleForm但僅顯示自定義字段做了一個自定義表單:
<div id="search_box">
<input type="text" name="criteria" id="search_box_criteria" value="Search..." />
<?php echo link_to('Search', '@my_module_search?criteria=') ?>
</div>
然後,我創建了一個名爲@my_module_search
鏈接到index動作路線:
my_module_search:
url: my_module/search/:criteria
param: { module: my_module, action: index }
requirements: { criteria: .* } # Terms are optional, show all by default
用JavaScript(jQuery的在這種情況下)我追加文本鏈接的href
屬性輸入到標準參數:
$('#search_box a').click(function(){
$(this).attr('href', $(this).attr('href') + $(this).prev().val());
});
最後,回到executeIndex
行動,我發現如果文本被輸入並添加自定義過濾器的DoctrineQuery
對象:
public function executeIndex {
...
// Deal with search criteria
if ($text = $request->getParameter('criteria')) {
$query = $this->pager->getQuery()
->where("MyTable.name LIKE ?", "%$text%")
->orWhere("MyTable.remarks LIKE ?", "%$text%")
...;
}
$this->pager->setQuery($query);
...
// Add a form to filter results
$this->form = new MyModuleForm();
}
其實,代碼更復雜,因爲我寫了一些泛音和一些我在父類中重用以重用代碼。但這是我能想到的最好的。
這迫使我使用模型屬性進行過濾,即對每個小部件使用不同的輸入。我正在考慮在模型列中使用'LIKE'來創建一個唯一的輸入字段並構建一個自定義查詢。 – elitalon 2011-04-06 13:32:33
這是一個完全不同的答案......你必須迭代每個字段並進行正確的查詢。稍後我會檢查我是否可以做到。 – Pabloks 2011-04-06 16:30:26
我知道:)謝謝你的努力。我一直在挖掘後端緩存,試圖提出一種基於生成類的替代解決方案。如果我找到了某些東西,我會更新我的答案 – elitalon 2011-04-07 08:41:35