2017-02-06 6 views
0

Я пытаюсь пройти через книгу «TYPO3 Extbase - Modern Extension Development» от П. Лобахера. Там я нахожусь в поиске с поисковым полем. Здесь мой редактор (PHPStorm) говорит мне, что $ search не определен.FE Searchfield in simpleblog extension не работает

У меня есть 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> 

Если я изменю назначение на просмотр в своем спискеВак к:

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

Затем он показывает мне блоги с заголовком «Тестирование» в нем. Но динамически это не сработает.

Я использую TYPO3 v8.5.1

Thx за вашу помощь.

ответ

1

Сначала вы должны изменить $ limit line, потому что его трудно читать. Измените его на:

$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-вывод этого поля формы?

EDIT: Из-за вашего поиска вы можете не кэшировать действие списка. Измените действие списка в ext_localconf.php на NOT CACHED.

+0

Привет, Пол, THX для вашего ответа. Я изменил NULL на 0, а затем у меня был отлаженный $ search и результат: '0' (1 символ) С назначениемMultiple() - Array вы имеете в виду что-то вроде: $ this-> view-> assign (array ((«блоги», $ this-> blogRepository-> findSearchForm ($ search, $ limit)), ('поиск', $ search)))? Или что вы имели в виду? Визуализированное HTML является: <класс = тип = имя входного «форма-контроль» «текст» = «tx_cfsimpleblog_bloglisting [поиск]»> EDIT: Я уже положить в «НЕ КЭШИРУЕТСЯ» Спасибо ему за Помогите. – codeFragment