我试图在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传递给控制器,但不知道如何。
你需要设置一个参数在函数注释中的类型(和/或它是否是一个对象作为类型提示。如果你不这样做,系统将不知道它得到了什么样的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);
}
更改此设置后,您很可能需要在安装工具中清除缓存才能生效。
好吧,在将参数从控制器传递到模板到局部然后再返回控制器时出现问题。我删除了部分并将代码打包到模板中。从那里传递参数,我可以用“$ this-> request-> getArgument('player')”来获取参数。
仍然不知道我做错了什么,但它是这样的。