0

我正在尝试阅读 P. Lobacher 的“TYPO3 Extbase - 现代扩展开发”一书。我在搜索字段中很重要。在这里,我的编辑器(PHPStorm)告诉我 $search 没有定义。

我有一个 listAction :

/**
 * @internal param string $search
 */
public function listAction() {
    if ($this->request->hasArgument('search')){
        $search = $this->request->getArgument('search');
    }
    $limit = ($this->settings['blog']['max']) ?: NULL;
    $this->view->assign('blogs', $this->blogRepository->findSearchForm($search,$limit));
    $this->view->assign('search', $search);
}

在我的存储库中,我尝试设置这样的查询:

/**
 * @param string $search
 * @param int $limit
 * @return array|\TYPO3\CMS\Extbase\Persistence\QueryResultInterface
 */
public function findSearchForm($search,$limit) {
    $query = $this->createQuery();
    $query->matching(
        $query->like('title','%'.$search.'%')
    );
    $query->setOrderings(array('title' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING));
    $limit = (int)$limit; if ($limit > 0) {
        $query->setLimit($limit);
    }
    return $query->execute();
}

在我的列表视图中,我有这样的搜索表单:

<f:form action="list" additionalAttributes="{role:'form'}"> <div class="form-inline">
    <div class="form-group">
        <f:form.textfield name="search" value="{search}" class="form-control" /> <f:form.submit value="Search!" class="btn-xs btn-primary" />
    </div> </div>
</f:form>

如果我将分配给我的 listAction 中的视图更改为:

$this->view->assign('blogs', $this->blogRepository->findSearchForm('Testblog',$limit));

然后他向我展示了标题片段为“Testblog”的博客。但动态它不会工作。

我正在使用 TYPO3 v8.5.1

谢谢你的帮助。

4

1 回答 1

1

首先,您应该更改 $limit 行,因为它难以阅读。将其更改为:

$limit = $this->settings['blog']['max'] ? $this->settings['blog']['max'] : 0;

我将 NULL 更改为 0,因为在存储库注释中,参数应该是一个整数。

然后,您还应该将两个 assign() 函数更改为 assignMultiple()-Array。

你有没有在你的控制器中调试过 $search 使用

\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($search);

因为您没有绑定到对象,所以您可能无法使用 getArgument() 获取 $search。您能否给我们该表单字段的渲染 HTML 输出?

编辑:由于您的搜索,您可能不会缓存列表操作。将 ext_localconf.php 中的列表操作更改为 NOT CACHED。

于 2017-02-07T08:13:22.680 回答