php 使用原则存储序列化对象

flseospp  于 2023-10-15  发布在  PHP
关注(0)|答案(2)|浏览(108)

我在使用doctrine存储php序列化对象时遇到了一些问题,当我使用以下代码存储时:

$item = new \Company\MyBundle\Entity\Frontend\table();
$item->setData(serialize($myPhpObject));
$this->_em->persist($item);
$this->_em->flush();

在另一个例子中:

$item = $this->_em->getRepository('MyBundle:frontend\table')->findOneById(...);
echo $item->getData(); // display only a part of the serialized object

我找到了一个解决办法,但我想有更好的事情要做:

$item->setData(json_encode(serialize($myPhpObject)));

当我使用它时,所有序列化的字符串都被存储,我可以正确地反序列化它。你知不知道哪里出了问题?

  • 编辑-
    这将是从列数据设置的示例:
data:
    type: string
    length: null
    fixed: false
    nullable: true
    column: data
pqwbnv8z

pqwbnv8z1#

我假设您正在使用注解作为您的原则配置。然后在你的实体中你可以使用object类型:

// src/Company/MyBundle/Entity/Frontend/table.php
// ...
/**
 * @var resource
 *
 * (non-PHPdoc)
 * @ORM\Column(name="data", type="object")
 */
private $data;
// ...

然后在你的控制器中,没有必要序列化/反序列化对象,原则将处理:

// src/Company/MyBundle/Controller/SomeController.php
// ...
// write
$item = new \Company\MyBundle\Entity\Frontend\table();
$item->setData($myPhpObject);

$this->_em->persist($item);
$this->_em->flush();

// ...
// read
$item = $this->getDoctrine()->getRepository('CompanyMyBundle:table')->find($id);
$myPhpObject = $item->getData();
var_dump($myPhpObject);
// ...

祝你好运!

ssm49v7z

ssm49v7z2#

使用ArrayType(a.k.a. array(在实体注解中)或ObjectType(也称为由于此问题(https://github.com/doctrine/dbal/issues/3289),Doctrine类型的实体注解中的object)可能存在一些潜在的安全问题(导致拒绝服务)
我自己会使用JsonObjectType。

相关问题