通过 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 并在字段上抛出错误。
我的约束:
- 数据库结构(我知道这很愚蠢,但我必须使用现有的数据库,而且由于数据库管理器不宽容,我无法真正创建任何视图)。
- PHP - 5.6.30(你知道服务器和东西......;))。
设想的解决方案:
- Data Transformer(我真的不认为我可以将它们用于多个输入)。
- 自定义验证器(好吧,我认为这可能是解决方案,但我真的不知道如何使用它,而且我还没有找到任何文档来解释如何设置实体字段,也没有找到如何使用多个输入)。
- 事件侦听器(同样,不知道如何使用它,也不知道如何将验证错误显示到正确的字段)。
好吧,我知道解决方案可能在其中之一,但我想不出正确使用它们的方法。
无论如何,谢谢你的帮助,再次为我糟糕的英语感到抱歉,祝你愉快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.
上询问版本
首先,我希望你能原谅我糟糕的英语。 其次,我知道,一切都在互联网上!但是这一次,我没有找到我想要的。
这里有一点上下文:
我目前正在使用 symfony 框架 (v3)。
我有两个实体:
错误
错误代码
它们是一对多的关系,一个errorCode可以link很多错误,但是一个错误只能有一个errorCode。
错误代码 table 由数据库管理员手动输入。
我有以下嵌套 formTypes 结构:
errorType
->errorCodeType
errorCodeType 包含 3 个不同的子代码字段 (integerType),它们不是 table 主键,而是我将在错误报告期间键入的内容。
我的问题:
如果在数据库中没有找到相应的 errorCode 实例,如何在提交表单后加载和 link 正确的 errorCode 并在字段上抛出错误。
我的约束:
- 数据库结构(我知道这很愚蠢,但我必须使用现有的数据库,而且由于数据库管理器不宽容,我无法真正创建任何视图)。
- PHP - 5.6.30(你知道服务器和东西......;))。
设想的解决方案:
- Data Transformer(我真的不认为我可以将它们用于多个输入)。
- 自定义验证器(好吧,我认为这可能是解决方案,但我真的不知道如何使用它,而且我还没有找到任何文档来解释如何设置实体字段,也没有找到如何使用多个输入)。
- 事件侦听器(同样,不知道如何使用它,也不知道如何将验证错误显示到正确的字段)。
好吧,我知道解决方案可能在其中之一,但我想不出正确使用它们的方法。
无论如何,谢谢你的帮助,再次为我糟糕的英语感到抱歉,祝你愉快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.
上询问版本