【问题标题】:Searchform in extbaseextbase 中的搜索表单
【发布时间】:2015-08-31 15:00:05
【问题描述】:

我尝试向我的 extbase 扩展添加一个简单的搜索表单,但它并没有像预期的那样工作。我想将输入(关键字)作为参数传递给我的 searchAction。

//添加到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()???

【问题讨论】:

  • 您可以省略arguments="{keyword}"-部分。除此之外,我认为您的代码没有任何问题。
  • 你确定它真的没有将参数传递给你的searchAction()吗?在您的操作中使用devlog 扩展和\TYPO3\CMS\Core\Utility\GeneralUtility::devLog($keyword, 'your_extension_key'); 进行检查。

标签: typo3 extbase


【解决方案1】:

您可以通过在控制器操作中使用以下方法从视图中获取所有参数。

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

【讨论】:

    【解决方案2】:

    我很奇怪你没有遇到异常。参数是数组的类型。 您的表单必须如下所示。

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

    【讨论】:

      【解决方案3】:

      在你的 html 表单中应该是这样的

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

      希望对您有所帮助!

      【讨论】:

        猜你喜欢
        • 2017-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多