2015-08-31 25 views
0

我試圖添加一個簡單的搜索表單到我的extbase擴展中,它不像預期的那樣工作。我想將輸入(關鍵字)作爲參數傳遞給我的searchAction。extbase中的Searchform

//添加到list.html

<f:form action="search" arguments="{keyword}"> 
    <f:form.textfield name="keyword" value="Suchbegriff"> 
    <f:form.submit value="Suchen" /> 
</f:form> 

//添加到ItemController.php

/** 
* action search 
* 
* @param \string $keyword 
* @return void 
*/ 
public function searchAction($keyword='') { 

    $items = $this->itemRepository->findKeyword($keyword); 
    $this->view->assign('items', $items); 
} 

我如何通過輸入從文本框keyword我ItemControllers searchAction() ???

+1

您可以省略'arguments =「{keyword}」'-part。除此之外,我沒有看到您的代碼有任何問題。 – Jost

+0

你確定它確實沒有將參數傳遞給你的'searchAction()'嗎?在你的操作中使用'devlog' Extension和'\ TYPO3 \ CMS \ Core \ Utility \ GeneralUtility :: devLog($ keyword,'your_extension_key');'檢查。 –

回答

0

您可以通過在控制器Action中使用以下方法從視圖中獲取所有參數。

$this->request->getArguments(); 

通過使用此方法,您可以檢查您的參數是否通過。 還可以檢查這樣的:

if($this->request->hasArgument('Search')) { } 

如果你的字段是關鍵字,那麼你可以找到這樣的:

if($this->request->hasArgument('Search')) { 
    $items = $this->itemRepository->findKeyword($this->request->getArgument('Search')); 
} 
$this->view->assign('searchItems', $items); 
0

我難怪,你沒有得到一個例外。參數是數組的類型。 你的表單必須看起來像這樣。

<f:form action="search" arguments="{keyword:keyword}"> 
    <f:form.textfield name="keyword" value="Suchbegriff"> 
    <f:form.submit value="Suchen" /> 
</f:form> 
0

在你的HTML表單應該BEL這樣

<f:form action="search" name="query"> 
    <f:form.textfield property="keyword" value=""> 
    <f:form.submit value="Suchen" /> 
</f:form> 
在控制器

應該是這樣的

/** 
* action search 
* 
* @param \string $keyword 
* @return void 
*/ 
public function searchAction($keyword='') { 

    if ($this->request->hasArgument('query')) { 
     $search = $this->request->getArgument('query'); 
     $items = $this->itemRepository->findKeyword($keyword); 
    } 
    $this->view->assign('items', $items); 
} 
在你的倉庫

應該是這樣的

/** 
* Gets events following by request 
* 
* 
* @param string $request Keyword 
* @return object 
*/ 

public function findKeyword($request = NULL){ 
    $query = $this->createQuery(); 
    if($request['string']) { 
     $result = $query->matching($query->like('name', '%'.$request['string'].'%'))->execute(); 
    } 
    return $result; 
} 

希望它會有所幫助!