我使用的是TYPO3 7.6和extbase。我有模型“工单”、“答案”和“状态”。
Ticket n:1 -> Status;
Ticket 1:n -> Answer;
Answer n:1 -> Ticket;
Status 1:n -> Ticket;在应答控制器中
public function createAction(\Vendor\Extname\Domain\Model\Ticket $ticket, \Vendor\Extname\Domain\Model\Answer $newAnswer)
{
//Set tikcet and it's normaly
$newAnswer->setTicket($ticket);
// Try to set status and get error
$newAnswer->getTicket($ticket)->setStatus($status);
}在模板答案/新建中
<f:form action="create" method="POST" enctype="multipart/form-data" name="newAnswer" controller="Answer" object="{newAnswer}"
arguments="{ticket:ticket}">
<f:form.select class="form-control" property="ticket.status" name="status" options="{status}"
optionLabelField="title"
optionValueField="uid" />
</f:form>我得到了
PHP可捕获的致命错误:传递到Domain\Model\Ticket::setStatus()的参数1必须是Domain\Model\Status的实例,给定的值为null
如何通过一个表单为多个模型对象设置值?在创建应答时设置工单的状态。
发布于 2020-04-24 05:05:29
甚至这个问题也是相当古老的:
如果不同的对象类型共享相同的接口,则可以输入提示并将它们指定为参数。那么类型提示必须是关于接口的,而不是关于特定对象或其他数据类型的:
namespace Vendor\Extname\Domain\Model;
interface AnswerOrStatusInterface
{
// can be empty or include common methods of both types
}
class answer implements \Vendor\Extname\Domain\Model\AnswerOrStatusInterface
{
...
}
class status implements \Vendor\Extname\Domain\Model\AnswerOrStatusInterface
{
...
}控制器的另一个命名空间:
namespace Vendor\Extname\Controller;
class AnswerController
{
public function createAction(
\Vendor\Extname\Domain\Model\Ticket $ticket,
\Vendor\Extname\Domain\Model\AnswerOrStatusInterface $answerOrStatus
) {
$answer = null;
$status = null;
if (is_a($answerOrStatus, \Vendor\Extname\Domain\Model\answer)) {
$answer = $answerOrStatus;
}
elseif (is_a($answerOrStatus, \Vendor\Extname\Domain\Model\status)) {
$status = $answerOrStatus;
}
// further logic
...
}
}在PHP手册中,您可以找到更多关于
从PHP 7.4开始,您仍然有更多的选择:
https://stackoverflow.com/questions/36936169
复制相似问题