【问题标题】:How can I set value for multiple model objects via one form?如何通过一种形式为多个模型对象设置值?
【发布时间】:2016-04-29 10:40:27
【问题描述】:

我使用 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”

如何通过一种形式为多个模型对象设置值?在我创建答案时设置工单状态。

【问题讨论】:

  • 在您的示例函数中,$status 是什么?这套在哪里?

标签: typo3 extbase typo3-7.6.x


【解决方案1】:

这个问题已经很老了:

如果它们共享相同的接口,您可以键入提示并将不同的对象类型分配为参数。那么类型提示必须是关于接口而不是特定对象或其他数据类型:

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 开始,您还有更多选择:

【讨论】:

    猜你喜欢
    • 2017-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-21
    • 1970-01-01
    • 2016-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多