gpt4 book ai didi

symfony - 在应用 DataTransformer 之前验证字段

转载 作者:行者123 更新时间:2023-12-02 12:17:23 24 4
gpt4 key购买 nike

在我的 Symfony 应用程序中,我有一个带有地址的事件实体。该地址应该可用于许多事件,因此我添加了一个 ManyToOne 关系。

address 实体包含 3 个字段(streetzipcodecity),但我想在我的表单 EventType 中,只有 1 个预先输入 address 的文本输入。因此,我创建了一个 DataTransformer 来执行此操作。

通过 AJAX 请求,我收到地址并插入它们。如果输入新地址,我想创建新的数据库记录。我现在的问题是验证新输入的地址。

我的DataTransformer看起来像这样:

class StringToAddressTransformer implements DataTransformerInterface {

/**
* @var ObjectManager
*/
private $om;

/**
* @param ObjectManager $om
*/
public function __construct(ObjectManager $om){
$this->om = $om;
}

public function transform($addrobj){
if (!$addrobj) {
return null;
}

return (string)$addrobj;
}

public function reverseTransform($address){

if (null === $address) {
return "";
}

preg_match('/^([A-Z][-A-Z ]+)\s+(\d+), (\d{5}) ([A-Z]+)$/i', $address, $res);

$street = $res[1] . ' '. $res[2];
$zipcode = $res[3];
$city = $res[4];

$addrobj = $this->om->getRepository('FSchubert\SiyabongaBundle\Entity\Address')->findOneBy(array(
'street' => $street, 'zipcode' => $zipcode, 'city' => $city
));

if(is_null($addrobj)){
$addrobj = new Address();
$addrobj->setStreet($street);
$addrobj->setZipcode($zipcode);
$addrobj->setCity($city);
}

return $addrobj;
}
}

一切顺利,但我完全没有对输入的地址进行验证。

我尝试在表单类中添加约束,但由于 DataTransformer 是在 bindRequest() 上调用的,在我看来,验证约束被忽略了。

基本上,我希望在我的 DataTransformer 中进行表单验证或以任何方式验证不存在的字段。如果我手动调用 RegEx-Validator,我的代码会是什么样子?或者是否有另一种(更好)的方法来实现我正在寻找的东西?

最佳答案

好吧,我找到了答案。到目前为止这不是最好的方法。我刚刚从地址实体中删除了除一个字符串 addressstring 之外的所有字段。现在我可以将多个事件映射到一个位置并进行适当的 ajax 调用。但不幸的是,我无法再确定每个地址的城市、街道或邮政编码。这工作正常,但正如我所说,这不是解决方案。我避免了真正的问题......但它有效。

关于symfony - 在应用 DataTransformer 之前验证字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15453753/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com