TYPO3: передача аргумента из представления в контроллер - тип аргумента для параметра не может быть обнаружен - PullRequest
0 голосов
/ 15 апреля 2019

Я пытаюсь передать аргумент из представления в контроллер в TYPO3 8.7, но постоянно получаю сообщение об ошибке:

#1253175643: The argument type for parameter $player of method Playground\Tabletennis\Controller\AdminController->playerdetailsAction() could not be detected.

Список игроков передается с контроллера на просмотр. Там я передаю список с фрагментом в часть, в которой я использую a для каждого цикла (как игрока), чтобы отобразить имена, окруженные действием link.action, которое должно снова перенести игрока на контроллер.

Я получаю список игроков из queryBuilder и содержит uid и name. Итерирование через них работает. Но когда я нажимаю на имя, я получаю ошибку. Ссылка «дополнительная информация» говорит, что мне нужно получить аргумент вручную, но попытка $keyword = $this->request->getArgument('player'); тоже не сработала.

AdminController.php:

/**
* action info
*
*/
public function infoAction()
{
    $players = $this->getPlayers();

    $this->view->assign('players', $players);
}

/**
* action playerdetails
*
*/
public function playerdetailsAction($player)
{
   $this->view->assign('player', $player);
}

/**
* action returnPlayers
*/
function getPlayers()
{
    $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tx_tabletennis_domain_model_players');
    $statement = $queryBuilder
      ->select('uid', 'name')
      ->from('tx_tabletennis_domain_model_players')
      ->addOrderBy('name', 'ASC')
      ->execute();
    while ($row = $statement->fetchAll()) {
    return $row;
    }
}

вид:


Players:
<br /><br />

<ol>

<f:for each="{players}" as="player">

    <li>
        <f:link.action action="playerdetails" arguments="{player:player}">
           <b>{player.name}</b>
        </f:link.action>
    </li>


</f:for>

</ol>

Что мне нужно, так это uid выбранного игрока, переданный контроллеру, но не знаю как.

Ответы [ 2 ]

1 голос
/ 15 апреля 2019

Вам необходимо установить, какой тип параметра указан в аннотации функции (и / или если это объект как подсказка типа. Если вы этого не сделаете, система не будет знать, что делать с UID проходит через переменную GET. В вашем случае это будет что-то вроде:

/**
 * action playerdetails
 *
 * @param \MyVendor\MyExt\Domain\Model\Player $player
 */
public function playerdetailsAction(\MyVendor\MyExt\Domain\Model\Player $player)
{
    $this->view->assign('player', $player);
}

После того, как вы измените это, вам, скорее всего, нужно очистить кеш в инструменте установки, прежде чем он заработает.

Подробнее об этом вы можете узнать здесь: https://docs.typo3.org/typo3cms/ExtbaseFluidBook/7-Controllers/1-Creating-Controllers-and-Actions.html#flow-pattern-display-a-single-domain-object

0 голосов
/ 16 апреля 2019

Хорошо, значит, что-то пошло не так при передаче аргументов из контроллера в шаблон к частичному, а затем обратно в контроллер.Я удалил частичное и упаковал код в шаблон.Оттуда аргумент передается, и я могу получить аргумент с помощью "$ this-> request-> getArgument ('player')".

До сих пор точно не знаю, что я сделал не так, но это работаетспособ.

...