我正在尝试阅读P. Lobacher的“TYPO3 Extbase - Modern Extension Development”一书。在那里我与搜索域有关。在这里,我的编辑(PHPStorm)告诉我$ search未定义。
我有一个listAction:
<div class="form-group">
<div class='input-group date' id='datetimepicker1'>
<input type='text' class="form-control" />
<span class="input-group-addon">
<span class="glyphicon glyphicon-calendar"></span>
</span>
</div>
</div>
@using (Script.Foot())
{
<script type="text/javascript">
//<![CDATA[
$(function () {
$('#datetimepicker1').datetimepicker();
});
//]]>
</script>
}
在我的存储库中,我尝试设置类似的查询:
/**
* @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();
}
如果我将listAction中的视图分配更改为:
<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>
然后他向我展示了标题片“Testblog”中的博客。但动态地它将不起作用。
我正在使用TYPO3 v8.5.1
感谢您的帮助。
答案 0 :(得分: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。