我正在尝试将视图中的参数传递给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和名称。遍历它们的工作原理。但是,当我单击一个名称时,会出现错误。 “更多信息”链接说,我必须手动获取参数,但是尝试$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传递给控制器,但不知道如何。
答案 0 :(得分:1)
您需要设置函数注释中的参数类型(和/或如果它是对象作为类型提示。如果不这样做,系统将不知道该如何做) 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
答案 1 :(得分:0)
好,所以将参数从控制器传递到模板再传递到局部,然后又传递回控制器时出了问题。我删除了部分并将代码打包到模板中。从那里传递参数,然后我可以使用“ $ this-> request-> getArgument('player')”来获取参数。
仍然不完全知道我做错了什么,但是它可以这样工作。