我使用TYPO3 7.6和extbase。 我有模型“Ticket”,“Answer”和“Status”
full-size-kana
在答案控制器中
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);
}
我得到了
“PHP Catchable致命错误:传递给Domain \ Model \ Ticket :: setStatus()的参数1必须是Domain \ Model \ Status的实例,null给出”
如何通过一个表单为多个模型对象设置值?创建答案时设置故障单的状态。
答案 0 :(得分:0)
这个问题已经很老了:
如果它们共享相同的接口,则可以键入提示并将不同的对象类型分配为参数。然后,类型提示必须是关于接口的,而不是特定的对象或其他数据类型:
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开始,您还有更多选择: