2015-11-11 39 views
1

我必須製作一個typo3擴展,它在下拉菜單中顯示街道。 現在我需要在頂部有一個分頁從A到Z通過第一個字符過濾數據 - Typo3/Extbase插件

點擊這些鏈接,然後已經過濾掉開始相應character.i街頭試圖讓在城市控制器listByChar行動呼籲
$cities = $this->cityRepository->findByChar();
但我不知道如何通過該字符作爲論點..我期望可以通過使用uri viewhelper
<f:uri.action controller="***" action="***" arguments="{***}" />)。

我這是怎麼顯示/處理我show.html街道:

<select onchange="location = this.options[this.selectedIndex].value;"> 
    <option>Straße auswählen</option> 
    <f:for each="{city.streets}" as="street"> 
     <option value="<f:uri.action controller="Street" action="show" arguments="{street : street}" />" >{street.name}</option> 
    </f:for> 
</select> 

,這些都是我的功能:

/classes/controller/cityController.php

/** 
* action listByChar 
* 
* @return void 
*/ 
public function listByCharAction() { 
    $cities = $this->cityRepository->findByChar(); 
    $this->view->assign('cities', $cities); 

} 

/classes/domain/repository/CityRepository.php

public function findByChar($char){ 
    *** I yet didn't figure this part out either :C 
} 

回答

1

如您所料,您可以將char作爲uri.action viewhelper的參數傳遞。由於您只需要街道名稱的第一個字符,因此請使用f:format.crop

show.html:

<select onchange="location = this.options[this.selectedIndex].value;"> 
    <option>Straße auswählen</option> 
    <f:for each="{city.streets}" as="street"> 
     <option value='<f:uri.action controller="Street" action="show" arguments="{char : \"{street.name -> f:format.crop(maxCharacters: 1, append: '')}\"}" />' >{street.name}</option> 
    </f:for> 
</select> 

在你的控制器,你可以用$this->request->getArgument('char')得到傳遞的參數。糾正我,如果我錯了,但它看起來像streetsCity有關,並有他們自己的模型和存儲庫。因此,在城市控制器中注入街道存儲庫,並在街道存儲庫中使用findByChar函數。

/classes/controller/cityController.php:

/** 
* streetRepository 
* 
* @var \VENDOR\ExtensionName\Domain\Repository\StreetRepository 
* @inject 
*/ 
protected $streetRepository; 

/** 
* action listByChar 
* 
* @return void 
*/ 
public function listByCharAction() { 
    $streets = $this->streetRepository->findByChar($this->request->getArgument('char')); 
    $this->view->assign('streets', $streets); 
} 

/班/域/資料庫/ StreetRepository .PHP:

public function findByChar($char){ 
    $query = $this->createQuery(); 
    $query->matching($query->like('name', $char . '%')); 
    return $query->execute(); 
} 
+0

我試着編輯這個使它工作的EAY我需要它...但所有我設法歸檔鏈接引導我到白頁:(當我通過例如'A'作爲參數,我不能直接發送到存儲庫? – Minzkraut

+0

後啓用錯誤報告我可以看到「調用到一個成員函數findByChar()對象「出現 – Minzkraut

+0

您是否正確注入了街道存儲庫?確保將\ VENDOR \ ExtensionName \更改爲您的供應商和分機名稱 –

相關問題