我必须制作一个typo3扩展名,在下拉菜单中显示街道。 现在我需要从A到Z的顶部分页。
点击这些链接然后必须从相应的字符开始过滤掉街道。我试图在城市控制器中进行button_Click
操作
listByChar
但我不知道如何将角色作为参数传递..我希望通过使用uri viewhelper来实现这一点
($cities = $this->cityRepository->findByChar();
)。
这是我在show.html中显示/处理街道的方式:
<f:uri.action controller="***" action="***" arguments="{***}" />
这些是我的职能:
/classes/controller/cityController.php
<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/domain/repository/CityRepository.php
/**
* action listByChar
*
* @return void
*/
public function listByCharAction() {
$cities = $this->cityRepository->findByChar();
$this->view->assign('cities', $cities);
}
答案 0 :(得分: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')
获取传递的参数。如果我错了,请纠正我,但看起来streets
与City
相关并拥有自己的模型和存储库。因此,在城市控制器中注入街道存储库,并使用街道存储库中的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();
}