通过 symfony 表单请求结果加载特定的学说实体

Load specific doctrine entity through symfony form request result

首先,我希望你能原谅我糟糕的英语。 其次,我知道,一切都在互联网上!但是这一次,我没有找到我想要的。

这里有一点上下文:

我目前正在使用 symfony 框架 (v3)。

我有两个实体:

它们是一对多的关系,一个errorCode可以link很多错误,但是一个错误只能有一个errorCode。

错误代码 table 由数据库管理员手动输入。

我有以下嵌套 formTypes 结构:

errorType
    ->errorCodeType

errorCodeType 包含 3 个不同的子代码字段 (integerType),它们不是 table 主键,而是我将在错误报告期间键入的内容。


我的问题:

如果在数据库中没有找到相应的 errorCode 实例,如何在提交表单后加载和 link 正确的 errorCode 并在字段上抛出错误。


我的约束:


设想的解决方案:

好吧,我知道解决方案可能在其中之一,但我想不出正确使用它们的方法。


无论如何,谢谢你的帮助,再次为我糟糕的英语感到抱歉,祝你愉快day/evening。



编辑:

我的错误类型表单:

$builder->add('code', CollectionType::class, array(
    'entry_type' => ErrorCodeType::class,
    'allow_add' => false,
    'allow_delete' => false,
    'required'=>true,
));

$builder->add('operatorAnnotation', TextType::class, array('label'=>'compléments','required'=>true));

我的 errorCodeType 形式:

$builder->add('aSubcode1', IntegerType::class, array('label'=>'Code de catégorie','required'=>true));
$builder->add('aSubcode2', IntegerType::class, array('label'=>'Code de classe','required'=>true));
$builder->add('aSubcode3', IntegerType::class, array('label'=>'Code de détail','required'=>true));

我的错误代码实体:

/**
 * @ORM\Column(type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @ORM\Column(type="integer")
 */
private $aSubcode1;

/**
 * @ORM\Column(type="integer")
 */
private $aSubCode2;

/**
 * @ORM\Column(type="integer")
 */
private $aSubCode3;

/**
 * @ORM\OneToMany(targetEntity="Error", mappedBy="code", cascade={"persist"})
 */
private $errors;

/*.........More things.......*/

我的错误实体:

/**
 * @ORM\Column(type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @ORM\Column(type="string", length=255, nullable=true)
 */
private $operatorAnnotation;

/**
 * @ORM\ManyToOne(targetEntity="ErrorCode", inversedBy="errors", cascade={"persist"})
 */
private $code;

/*.........More things.......*/

好的,谢谢@Neok 试图帮助我!

我找到了 "Ghetto" 方法来获得我想要的东西:

首先,我取消了link我的表单和实体。

然后,我为我的错误制作了一个自定义表单(仍未 linked),其中包括 ErrorCode 实体的所有三个子代码字段以及与 Error 实体相关的其他一些字段(this首先是我的口味 "Ghetto").

在那之后,我在我的控制器中捕获了表单并执行了多个查询以加载 ErrorCode 实体,或者,如果不可能,找出给我带来麻烦的字段(哪个无效)

然后,该过程采用两条不同的路径:

  • 如果一切都有效,我 link 我发现错误代码(通过 url(第二 "ghetto" 部分)发送的 id)和级联坚持我的错误。

  • 如果出现问题,我会在使用 ( $myForm->get([MyField])->addError([MyError]) ) 后发回表单(这是我认为的第三件事是 "ghetto")

如果有人找到更好的解决方案,我很想听听,但我认为展示我找到的解决方案会是一件好事。

最后但同样重要的是,如果我的英语语法、句法、词汇...让你眼睛流血,欢迎你在我的 post.

上询问版本