Как установить свойство Entity в Symfony2 которое является результатом работы сервиса? Как вы поступаете, если нужно установить какое-то свойство модели как результат работы другого сервиса. Например, есть ресурс к которому можно получить доступ предъявив код доступа(token). Код генерируется сервисом на основании [param + secret + expire] => hash Данные модели возвращаются клиенту в виде JSON данных списком ресурсов вместе с ключами к каждому ресурсу. Как такое правильно реализовать на Symfony?
Для установки свойства Entity, которое является результатом работы сервиса, вы можете использовать Dependency Injection Container в Symfony.
Для начала, создайте сервис, который будет генерировать код доступа на основе параметров и секретного ключа. Для этого определите сервис в файле services.yml:
Затем создайте сервис AccessCodeGenerator с методом generateAccessCode() для создания кода доступа.
namespace AppBundle\Service; class AccessCodeGenerator { private $param; private $secret; public function __construct($param, $secret) { $this->param = $param; $this->secret = $secret; } public function generateAccessCode() { // генерация кода доступа на основе параметров и секретного ключа $accessCode = $this->param . $this->secret; return $accessCode; } }
Теперь в вашем контроллере или сервисе, где вы работаете с вашей моделью, вы можете использовать сервис AccessCodeGenerator для генерации кода доступа и установки его как свойства вашей модели:
namespace AppBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use AppBundle\Service\AccessCodeGenerator; class YourController extends Controller { public function yourAction() { $accessCode = $this->get('app.access_code_generator')->generateAccessCode(); // установка accessCode как свойства вашей модели $yourEntity->setAccessCode($accessCode); // сохранение вашей модели $em = $this->getDoctrine()->getManager(); $em->persist($yourEntity); $em->flush(); // возвращение данных клиенту $data = array( 'resource' => $yourEntity, 'access_code' => $accessCode ); return $this->json($data); } }
Теперь при вызове вашего действия yourAction() код доступа будет сгенерирован с помощью сервиса AccessCodeGenerator и установлен как свойство вашей модели. Далее вы можете вернуть данные клиенту в формате JSON вместе с ключами к каждому ресурсу.
Надеюсь, это поможет вам реализовать необходимую функциональность в Symfony2.
Для установки свойства Entity, которое является результатом работы сервиса, вы можете использовать Dependency Injection Container в Symfony.
Для начала, создайте сервис, который будет генерировать код доступа на основе параметров и секретного ключа. Для этого определите сервис в файле services.yml:
services:app.access_code_generator:
class: AppBundle\Service\AccessCodeGenerator
arguments:
- "%your_param%"
- "%your_secret%"
Затем создайте сервис AccessCodeGenerator с методом generateAccessCode() для создания кода доступа.
namespace AppBundle\Service;class AccessCodeGenerator
{
private $param;
private $secret;
public function __construct($param, $secret)
{
$this->param = $param;
$this->secret = $secret;
}
public function generateAccessCode()
{
// генерация кода доступа на основе параметров и секретного ключа
$accessCode = $this->param . $this->secret;
return $accessCode;
}
}
Теперь в вашем контроллере или сервисе, где вы работаете с вашей моделью, вы можете использовать сервис AccessCodeGenerator для генерации кода доступа и установки его как свойства вашей модели:
namespace AppBundle\Controller;use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use AppBundle\Service\AccessCodeGenerator;
class YourController extends Controller
{
public function yourAction()
{
$accessCode = $this->get('app.access_code_generator')->generateAccessCode();
// установка accessCode как свойства вашей модели
$yourEntity->setAccessCode($accessCode);
// сохранение вашей модели
$em = $this->getDoctrine()->getManager();
$em->persist($yourEntity);
$em->flush();
// возвращение данных клиенту
$data = array(
'resource' => $yourEntity,
'access_code' => $accessCode
);
return $this->json($data);
}
}
Теперь при вызове вашего действия yourAction() код доступа будет сгенерирован с помощью сервиса AccessCodeGenerator и установлен как свойство вашей модели. Далее вы можете вернуть данные клиенту в формате JSON вместе с ключами к каждому ресурсу.
Надеюсь, это поможет вам реализовать необходимую функциональность в Symfony2.