TYPO3:将参数从视图传递到控制器 - 无法检测参数的参数类型

问题描述 投票:0回答:2

我试图在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传递给控制器​​,但不知道如何。

typo3 fluid extbase typo3-8.x
2个回答
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


0
投票

好吧,在将参数从控制器传递到模板到局部然后再返回控制器时出现问题。我删除了部分并将代码打包到模板中。从那里传递参数,我可以用“$ this-> request-> getArgument('player')”来获取参数。

仍然不知道我做错了什么,但它是这样的。

© www.soinside.com 2019 - 2024. All rights reserved.