自定義Symfony filter 過濾器)

2021-08-25 16:24:19 字數 1391 閱讀 4008

symfony自動生成的filter有一些侷限性,比如不能過濾關聯表的特定字段,過濾的表單只有input和select兩種,

下面介紹處理上面兩個問題的解決方案。

1. 關聯表字段查詢

假設我們有order和user兩張表,order中有user_id和user關聯,syfmony預設可以通過user_id來過濾,現在想通過user的name欄位模糊查詢獲得使用者的所有訂單。

在[b]sfformfilterdoctrine[/b]中有方法dobuildquery,

if ($this->gettable()->hasfield($field))

else if (!method_exists($this, $method = sprintf('add%scolumnquery', self::camelize($field))) && null !== $type)

從上面的**可以看出只要增加乙個add%filedname%columnquery方法即可以自定義每個欄位的查詢,所以只要新增如下**

[code]

public function addusernamecolumnquery(doctrine_query $query, $field, $value) }

[/code]

2. 自定義filter表單字段型別

假設我們有一張商品表product, 其中有乙個欄位status,我們需要使用checkbox選擇多個狀態來過濾商品

首先在productformfilter的configure函式中新增

$this->widgetschema['status'] = new sfwidgetformchoice(array(

'choices' => self::$status_text,

'multiple' => true,

'expanded' => true,

));$this->validatorschema['status'] = new sfvalidatorchoice(array(

'required' => false,

'multiple' => true,

'choices' => array_keys(self::$status_text),

));

這和定義form的widget一樣,但是如果這樣的還不行, 因為涉及到多選,但預設status是input的型別,所以我們需要讓symfony知道我們現在傳過來的引數可能是陣列,在filter中過載getfields方法,把status欄位設為foreignkey型別

public function getfields()

自定義 如何自定義協議

何為自定義協議,其實是相對標準協議來說的,這裡主要針對的是應用層協議 常見的標準的應用層協議如http ftp smtp等,如果我們在網路通訊的過程中不去使用這些標準協議,那就需要自定義協議,比如我們常用的rpc框架 dubbo,thrift 分布式快取 redis,memcached 等都是自定義...

自定義控制項 自定義鐘錶

private context mcontext 畫筆 private paint mpaint 控制項的寬 private int mwidth x方向的圓心座標 private int center 鐘錶的半徑 private int mradio 圓環的寬 private int stroke...

自定義控制項及自定義屬性

自定義控制項在android開發中的重要性,是不言而喻,眾人皆知的。希望通過這二天的學習,能讓大家了解自定義控制項的原理,熟悉自定義控制項的使用步驟,並能寫出一些普通的效果。內容介紹 1 使用系統控制項,實現自定義的效果,案例有 優酷環形選單 廣告條 viewpager 下拉列表 spinner 2...