Задать вопрос
Не стремительный, не целеустремлённый и никогда не довожу дело до конца.
Местоположение
Россия, Москва и Московская обл.

Достижения

Все достижения (14)

Наибольший вклад в теги

Все теги (63)

Лучшие ответы пользователя

Все ответы (208)
  • Не запускается сервис в docker-compose?

    IgorPI
    @IgorPI
    Уже неоднократно на этом форуме советую один и тот же конфиг

    # Database
      db:
        image: percona:latest
        container_name: myname.db
        restart: on-failure
        ports:
          - 127.0.0.150:3306:3306
        expose:
          - 3306
        environment:
          - MYSQL_ROOT_PASSWORD=rdkw1UDddqOEF4L1pmNkcyQ2oL
          - MYSQL_DATABASE=mydb
          - MYSQL_ROOT_HOST=%


    Да

    И не забудьте выкинут предыдущий.

    Спасибо.
    Ответ написан
  • Symfony контент в базе данных на нескольких языках?

    IgorPI
    @IgorPI Автор вопроса
    Нашёл для себя решение.
    Не уверен в том, что это адекватная практика.
    Тем не менее, как мне показалось, это то что мне нужно.

    Описываю логику.

    <?php
    
    
    namespace App\Classes\Entity;
    
    /**
     * Class AbstractEntity
     * @package App\Classes\Entity
     */
    abstract class AbstractEntity
    {
        /** @var string  */
        protected $language = "ru";
    
        /**
         * @param string $language
         */
        public function setLanguage(string $language): void
        {
            $this->language = $language;
        }
    }


    <?php
    
    
    namespace App\Entity;
    
    
    use App\Classes\Entity\AbstractEntity;
    use Doctrine\Common\Collections\ArrayCollection;
    use Doctrine\ORM\Mapping\JoinColumn;
    use Doctrine\ORM\Mapping as ORM;
    use Symfony\Component\Validator\Constraints\NotNull;
    use Symfony\Component\Validator\Mapping\ClassMetadata;
    
    /**
     * @ORM\Entity(repositoryClass="App\Repository\CategoryRepository")
     * @ORM\Table(name="categories")
     */
    class Category extends AbstractEntity
    {
    
        /**
         * @ORM\Column(type="integer")
         * @ORM\Id
         * @ORM\GeneratedValue
         */
        private $id;
    
        /**
         * @ORM\Column(name="name", length=64)
         */
        private $name_ru;
    
        /**
         * @ORM\Column(length=64, nullable=true)
         */
        private $name_cn;
    
        /**
         * @ORM\Column(length=64, nullable=true)
         */
        private $name_en;
    
        /**
         * @return mixed
         */
        public function getId()
        {
            return $this->id;
        }
    
        /**
         * @param $name
         * @param string $lang
         */
        public function setName($name, $lang)
        {
            $this->{"name_$lang"} = $name;
        }
    
        /**
         * @return string
         */
        public function getName()
        {
            return $this->{"name_$this->language"};
        }
    
    }


    Слушатель, для того что бы можно было переключать свойство language, которые мы будем наследовать от AbstractEntity, своего рода контракт.

    <?php
    
    
    namespace App\Listeners;
    
    use App\Classes\Entity\AbstractEntity;
    use Doctrine\Persistence\Event\LifecycleEventArgs;
    use Symfony\Component\HttpFoundation\Request;
    use Symfony\Component\HttpFoundation\RequestStack;
    
    
    /**
     * Class LanguageEntityListener
     * @package App\Listeners
     */
    class LanguageEntityListener
    {
    
        /** @var string  */
        private $language = "ru";
        /** @var Request */
        private $request;
    
        /**
         * LanguageEntityListener constructor.
         * @param RequestStack $requestStack
         */
        public function __construct(RequestStack $requestStack)
        {
            $this->request = $requestStack->getCurrentRequest();
            $this->language = $this->request->get("lang", "ru");
        }
    
    
        public function postLoad(LifecycleEventArgs $event)
        {
            $entity = $event->getObject();
    
            if (is_a($entity, AbstractEntity::class)) {
                $entity->setLanguage($this->language);
            }
        }
    }


    services.yaml
    services:
       
        app.listeners.language_entity_listener:
            class: App\Listeners\LanguageEntityListener
            arguments: ['@request_stack']
            tags:
                - { name: doctrine.event_listener, event: postLoad, method: postLoad }


    5e264de82c98a283903729.gif

    Понятное дело, что это решение тяжело масштабируется.
    Ответ написан

Лучшие вопросы пользователя

Все вопросы (190)