我在Typo3 8.7中创建了一个扩展,我想在其中预订一些简短的浮动值。 我创建了一个Fluid表单,该表单应该将信息发送到Controller。但这对我不起作用。我敢肯定,我只是缺少一些基础知识。那么如何将浮点值从文本字段发送到控制器$ money变量?
流体形式看起来像这样
<f:form action="addbalance" >
<f:form.textfield property="money"/>
<f:form.submit value="send"/>
</f:form>
那是我的控制器
public function addBalanceAction(\Awesome\Creditext\Domain\Model\Member $Member, $money)
{
$this->addFlashMessage('Updated assets', '', \TYPO3\CMS\Core\Messaging\AbstractMessage::OK);
$Member->addBooking($money);
$this->MemberRepository->update($Member);
$this->redirect('list');
}
addBooking函数
public function addBooking($value)
{
$this->ownbalance += $value;
}
答案 0 :(得分:1)
使用name
代替property
,例如<f:form.textfield name="money" />
。当您将对象添加到property
并希望该字段显示/编辑其属性之一时,将使用f:form
。例如:
<f:form action="edit" object="{person}">
<f:form.textfield property="name" />
</f:form>
此字段将显示给定name
对象的person
属性。
答案 1 :(得分:1)
就像在回答中提到的rudy-gnodde一样,'property'属性只能在将对象传递给表单时使用。如果使用表单呈现模板的操作将“成员”对象传递给了模板,则可以这样绑定它
<f:form action="addBalance" object="{member}">
<f:form.textfield property="ownbalance" />
</f:form>
但是,由于您要将该金额添加到现有值而不是简单的值上,因此该解决方案不太适合您。 您应该提供“名称”属性而不是“属性”,而不要传递对象。
<f:form action="addBalance">
<f:form.hidden name="member" value="{member}" />
<f:form.textfield name="balanceToAdd" />
<f:form.submit value="send" />
</f:form>
请注意,这需要'member'实例进行更新才能传递给模板。
您的控制器应该看起来像这样
/**
* @param \Awesome\Creditext\Domain\Model\Member $member
* @param float $balanceToAdd
*/
public function addBalanceAction(\Awesome\Creditext\Domain\Model\Member $member, $balanceToAdd){
// code to add the balance goes here
}
Extbase根据phpdoc批注转换您的输入值,因此您需要正确设置。
答案 2 :(得分:0)
“魔术”在您的PHP文档中... Extbase系统分析您的php文档并转换值:
/**
* @param \Awesome\Creditext\Domain\Model\Member $Member
* @param float $money
*/
public function addBalanceAction(\Awesome\Creditext\Domain\Model\Member $Member, $money)
{
...
}
但是请不要忘记:php使用点作为小数点分隔符。因此,如果使用逗号分隔,建议在您的initializeAction中用点代替逗号,如下所示:
public function initializeAddBalanceAction()
{
if ($this->request->hasArgument('money')) {
$money = str_replace(',', '.', $this->request->getArgument('money');
$this->request->setArgument('money', $money);
}
}
但是请注意要进行更多检查,因为逗号用作千位分隔符,并且如果您的前端用户使用点和逗号分隔,则可能会再次中断浮点数。
正如Rudy在他的回答中所写,该属性应为name
而不是property
。