Используйте метод репозитория, чтобы определить __toString () для сущности - PullRequest
0 голосов
/ 24 апреля 2019

Допустим, у меня есть класс сущности "книга". Он связан с классом сущности «автор». В моем хранилище книг у меня есть метод getTitle(), который объединяет информацию из книги и атрибуты автора.

Теперь я хочу, чтобы в любом из моих представлений при вызове {{thisBook}} отображался результат getTitle ().

Инстинктивно, я полагаю, что это потребует создания метода __toString() в моей сущности книги, который вызывает метод getTitle () моего хранилища книг. Но все советуют против этого (см .: Вызов метода репозитория от сущности , Как получить доступ к методам репозитория для сущности в symfony2? ...).

Должен ли я "форсировать" систему? Или есть более чистый способ сделать это? Это звучит так тривиально, должен быть "официальный" и простой способ сделать это ...

Ответы [ 2 ]

1 голос
/ 29 апреля 2019

Нет проблем в определении метода в самой сущности, если он не включает доступ к внешним ресурсам.Поэтому, если все, что вы делаете, это объединяете значения из самой сущности, это не проблема (Google по поводу так называемых anemic и rich сущностей).

Использование чего-то подобного service в данном случае определенно излишне.По сути, вы не должны обращаться к сервисам (и репозиториям, или к чему-либо еще, что фактически выполняет некоторую работу) в сущностях, они просто хранилища.Но доступ к значениям самой сущности или даже к значениям связанных сущностей - это нормально.

0 голосов
/ 24 апреля 2019

Создайте сервис, например src/Service/SetupHelper.php:

<?php


namespace App\Service;

use App\Entity\User;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Session\SessionInterface;

class SetupHelper
{
    private $em;
    private $session;

    public function __construct(EntityManagerInterface $em, SessionInterface $session)
    {
        $this->em = $em;
        $this->session = $session;
    }

    public function getName(){
        return $this->getUser()->getName();
    }

    }
}

После настройки сервисов вы можете вызывать функции в любой ветке, например:

<title>{% block title %}{{ SetupHelper.getName() }}!{% endblock %}</title><title>{% block title %}{{ SetupHelper.getName() }}!{% endblock %}</title>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...