【问题标题】:filter data by first character - Typo3/Extbase plugin按第一个字符过滤数据 - Typo3/Extbase 插件
【发布时间】:2015-11-11 09:16:58
【问题描述】:

我必须制作一个typo3 扩展,在下拉菜单中显示街道。 现在我需要在顶部从 A 到 Z 进行分页。

单击这些链接然后必须过滤掉以相应字符开头的街道。我尝试在城市控制器中调用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
}   

【问题讨论】:

    标签: php model-view-controller typo3 extbase


    【解决方案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-&gt;request-&gt;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);
     }
    

    /classes/domain/repository/StreetRepository.php:

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

    【讨论】:

    • 我尝试编辑它以使其在我需要的时候工作......但我设法存档的只是将我引导到白页的链接:(当我传递例如'A'作为参数时,我不能直接将它发送到存储库吗?
    • 启用错误报告后,我可以看到“在非对象上调用成员函数 findByChar()”
    • 您是否正确注入了街道存储库?确保您将 \VENDOR\ExtensionName\ 更改为您的供应商和扩展名
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-24
    相关资源
    最近更新 更多