我正在尝试在 TYPO3 8.7 中将参数从视图传递到控制器,但不断收到错误:
#1253175643: The argument type for parameter $player of method PlaygroundTabletennisControllerAdminController->playerdetailsAction() could not be detected.
玩家列表从控制器传递到视图。在那里,我将列表槽传递给一个部分,其中我使用 for 每个循环(作为玩家(来显示名称,周围是一个 link.action,它应该再次将玩家带到控制器。
我从查询生成器中获取玩家列表,并包含 uid 和名称。通过它们进行迭代是有效的。但是当我单击一个名称时,我会收到一个错误。链接"更多信息"说,我必须手动获取参数,但尝试$keyword = $this->request->getArgument('player');
也不起作用。
管理员控制器.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,但不知道如何。
您需要在函数的注释中设置参数的类型(和/或它是否是作为类型提示的对象。如果你不这样做,系统将不知道如何利用它通过GET变量获得的uid。在您的情况下,这将使它类似于:
/**
* action playerdetails
*
* @param MyVendorMyExtDomainModelPlayer $player
*/
public function playerdetailsAction(MyVendorMyExtDomainModelPlayer $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
好的,所以在将参数从控制器到模板交给部分然后返回控制器时出了点问题。我删除了部分并将代码打包到模板中。从那里传递参数,我可以用"$this->request->getArgument('player'("来获取参数。
仍然不知道我做错了什么,但它以这种方式工作。