2012-01-13 63 views
0

我需要鏈接選擇框在我的zend框架項目:國家 - >地區 - >省 - >城鎮。Zend框架動作助手或其他東西?

我正在使用zend表單並打算在其中一個被更改時重新提交以重新加載鏈接選擇框的內容。我已經在PHPunit測試中編寫了一些代碼來模擬我在控制器中需要的內容。 我將需要在我的網站上以多種不同形式使用此區域結構,並計劃使用AJAX進行增強。

我不想重複這段代碼,所以我應該在哪裏存儲它,以及它應該如何構造以便我可以重用它的功能。我想也許是一個行動幫手?

public function testCanGetRegionalStructureFromUser() { 
     $user = new \Entities\User; 
     $user = $this->em->getRepository('Entities\User')->findOneByEmail('[email protected]'); 

     $town = new \Entities\Town; 
     $town = $user->getTowns_id(); 

     // if user has not town input, then use the default 
     if (is_null($town)) { 
      $config = Zend_Registry::get('config'); 
      $defaulttownid = $config->towns->defaultid; 
      $town = $this->em->getRepository('Entities\Town')->find($defaulttownid); 
     } 

     // get the town id 
     $townid = $town->getId(); 

     //get the province 
     $province = $town->getProvinces_id(); 
     $provinceid = $province->getId(); 

     //get the region 
     $region = $province->getRegions_id(); 
     $regionid = $region->getId(); 

     //get the country 
     $country = $region->getCountries_id(); 
     $countryid = $country->getId(); 

     $countrylist = $this->em->getRepository('Entities\country')->findActiveCountries(); 
     $regionlist = $this->em->getRepository('Entities\Region')->findActiveRegions($countryid); 
     $provincelist = $this->em->getRepository('Entities\Province')->findActiveProvinces($regionid); 
     $townlist = $this->em->getRepository('Entities\Town')->findActiveTowns($provinceid); 
    } 

countrytrist,regionlist等準備好注入到我的表單中,作爲將用於填充選擇框的選項。

回答

1

我認爲對於這種情況,創建一個複合Zend_Form_Element是最有意義的。

這樣,您只需幾行代碼就可以輕鬆地將元素添加到窗體中,您可以將驗證程序內置到元素中,因此您不會重複該邏輯,並且可以使用自己的裝飾器輕鬆控制選擇的佈局,只需更改一個文件以反映對所有表單的更改。

對於我的一個項目,我創建了一個複合元素,它具有一個純文本框,用於在用戶輸入時實時搜索客戶的自動完成功能。一旦從自動完成列表中選擇了一個客戶,就會進行ajax調用,以獲取該客戶擁有的屬性列表,並使用新列表更新下拉框。

元素提供對數據值(customer,property)的訪問,裝飾器渲染組中的單個元素,並設置必要的事件處理程序和ajax調用(大部分代碼位於外部.js文件中。

Creating and Rendering Composite Elements
Similar to the above reference, by Matthew Weier O'Phinney
Video: Creating composite elements

+0

感謝信息,我可能會使用複合元素後來在我的項目,但我可能會在這種情況下使用的動作助手。 – dimbo 2012-01-16 15:19:36

+0

好吧,你可能想使用視圖助手,而不是一個從視圖中調用視圖助手通常輸出HTML或視圖邏輯,在控制器中使用動作助手將常用功能注入控制器。 – drew010 2012-01-16 20:39:55