按第一个字符过滤数据 - Typo3 / Extbase插件

时间:2015-11-11 09:16:58

标签: php model-view-controller typo3 extbase

我必须制作一个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);

}

1 个答案:

答案 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')获取传递的参数。如果我错了,请纠正我,但看起来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();
}