我正在使用symfony LTS和主FOS:elastica和master jms_serializer。
fos_elastica:
clients:
default: { host: %elastic_host%, port: %elastic_port% }
serializer:
callback_class: FOS\ElasticaBundle\Serializer\Callback
serializer: serializer
indexes:
c_search:
client: default
types:
adverts:
mappings:
id:
type: integer
user:
type: string
Media:
type: nested
properties:
urlMedia: ~
persistence:
driver: orm
model: WebSite\MyBundle\Entity\Advert
provider: ~
listener: ~
finder: ~
php app/console fos:elastica:populate
在添加以下行之前,此命令没有任何问题。当我尝试运行“php app / console fos:elastica:populate”时,由于我添加了这些行,因此存在无限循环:
serializer:
callback_class: FOS\ElasticaBundle\Serializer\Callback
serializer: serializer
在此之后,我在我的控制器上发出了一个简单的请求(因为我的问题没有序列化):
public function testAction()
{
$repositoryManager = $this->container->get('fos_elastica.manager');
$repository = $repositoryManager->getRepository('WebSiteMyBundle:Advert');
$data = json_encode($repository->find('68200'));
return $this->render('WebSiteMyBundle:Default:test.html.twig', array(
'test'=> $data,
));
}
在我的结果测试中,有5个空数组。我知道结果很好,因为我的原始请求中有正常的5响应,但如果有人有想法,我找不到显示真实内容的解决方案。
答案 0 :(得分:1)
好的,我的评论是对的,这个问题与序列化程序有关,而且非常符合逻辑。 实际上,如果你没有指定任何东西,弹性将索引级联中的每个属性和每个关系,这在进行一些循环引用时是个问题。
您可以采取以下措施解决问题:
<?php
namespace WebSite\MyBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use JMS\Serializer\Annotation as Serializer;
/**
* Advert
*
* @ORM\Table(name="advert")
*/
class Advert
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var string
*
* @ORM\Column(name="title", type="string", length=55)
* @Serializer\Groups({"elastica"})
*/
private $title;
...
fos_elastica:
clients:
default: { host: %elastic_host%, port: %elastic_port% }
serializer:
callback_class: FOS\ElasticaBundle\Serializer\Callback
serializer: serializer
indexes:
c_search:
client: default
types:
adverts:
serializer:
groups: [elastica]
mappings:
id:
type: integer
user:
type: string
Media:
type: nested
properties:
urlMedia: ~
persistence:
driver: orm
model: WebSite\MyBundle\Entity\Advert
provider: ~
listener: ~
finder: ~
然后,您不应该有任何循环引用,并且只有弹性搜索索引中的title属性。
祝你好运。