Я хочу получить доступ к полному URL-адресу моей фотографии в одном из моих объектов.Правильный способ получения параметров в объекте
Объект (PlacePhoto) сериализуется с помощью JMSSerializerBundle, когда я использую свой API.
Вот образец моего лица:
/**
* @VirtualProperty
*/
public function getUrl()
{
return 'https://xxxx.s3.amazonaws.com/' . $this->path;
}
КДС путь (https://xxxx.s3.amazonaws.com/) находится в моем файле parameters.yml, и я предпочел бы, чтобы получить доступ к этому значению, вместо того, чтобы писать непосредственно путь в моей сущности ,
Каков правильный путь? Я знаю, что я могу получить доступ к параметрам, создав службу, но я не вижу, как и когда я мог бы называть ее в своем коде, зная, что я получаю доступ к фотографиям через свой объект Place (отношения «один ко многим») таким образом:
public function getPlaceAction()
{
$places = $this->getDoctrine()->getRepository('CyrAppBundle:Place')->findAll()
return $places;
}
Есть ли способ сделать это? возможно, во время сериализации?
EDIT 27/08/2015
мне удалось это сделать, создав doctrine listener на postLoad
события.
Мой services.yml
services:
app.listener.placephoto_helper:
class: Cyr\AppBundle\Listener\PlacePhotoHelper
arguments: [%cdn_webpath%]
tags:
- { name: doctrine.event_listener, event: postLoad, connection: default }
Мой слушатель
<?php
namespace Cyr\AppBundle\Listener;
use Doctrine\ORM\Event\LifecycleEventArgs;
use Cyr\AppBundle\Entity\PlacePhoto;
class PlacePhotoHelper
{
private $cdnWebPath;
public function __construct($cdnWebPath)
{
$this->cdnWebPath = $cdnWebPath;
}
public function postLoad(LifecycleEventArgs $args)
{
$entity = $args->getEntity();
$entityManager = $args->getEntityManager();
if ($entity instanceof PlacePhoto) {
$entity->setUrl($this->cdnWebPath . '/' . $entity->getPath());
}
}
}
Отличное решение! –