2017-02-06 26 views
0

我正在尝试阅读P.Lobacher的“TYPO3 Extbase - 现代扩展开发”一书。在那里,我与搜索字段有关。在这里,我的编辑(PHPStorm)告诉我$ search没有被定义。简单博客扩展中的FE Searchfield不起作用

我有一个的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(); 
} 

在我的列表视图中我有这样的searchform:

<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)); 

然后他向我展示了带有titlefragment“Testblog”的博客。但动态的它不会工作。

我正在使用TYPO3 v8.5.1

Thx为您提供帮助。

回答

1

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

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

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

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

你曾经使用

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

因为你不绑定到一个对象调试$搜索在你的控制器,你可能无法得到$与getArgument搜索()。您能否给我们提供该表单字段的呈现HTML输出?

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

+0

嗨保罗,thx为您的答案。我已经将NULL更改为0,然后我调试了$ search并且结果是:'0'(1个字符) 使用assignMultiple() - 数组表示您的意思是:$ this-> view-> assign(array (('blogs',$ this-> blogRepository-> findSearchForm($ search,$ limit)),('search',$ search)))?或者你是什么意思? 渲染HTML是:<输入类=“形式控制”型=“文本”名称=“tx_cfsimpleblog_bloglisting [搜索]”> 编辑:我已经投入到“不高速缓存” THX您帮帮我。 – codeFragment