Тип формы Symfony DateInterval: настройки на стороне Doctrine и Twig

Я пытаюсь использовать тип поля формы DateInterval с Symfony, но я немного не понимаю, как его правильно использовать. Что касается поля формы, в документе (https://symfony.com/doc/current/reference/forms/types/dateinterval.html#input) говорится, что мы можем использовать в качестве ввода: строку, объект DateInterval или массив.

Но какой тип я должен использовать на стороне Doctrine (я использую MySql) для сохранения результата? Я пробовал строку, дату и время, целое число и массив. Мне удается заставить его работать только с использованием типа массива с обеих сторон, но я бы предпочел использовать объект DateInterval, если это возможно, и кажется, что это должно быть возможно. У кого-нибудь есть идея?

Затем вторая проблема: как мне распечатать сохраненный результат в виде строки в Twig? Даже если я сохраню его как массив, мне нужно создать фильтр в Twig, чтобы правильно проанализировать этот массив?

Похоже, мне здесь не хватает какой-то информации, но я ничего не могу найти в Google. Кто-нибудь может помочь?

Спасибо fyrye. Это хороший ответ на мою проблему, но он не работает. Когда я настраиваю поле как интервал даты или интервал, он говорит, что сопоставление класса сущности недопустимо: / ** * @ORM \ Column (name = "duration", type = "dateinterval") * / private $ duration;

Midas 04.11.2018 10:08

Вы очистили и прогрели кеш? Обновите свой вопрос с помощью сопоставления сущностей и кода FormType.

Will B. 04.11.2018 10:14

Doctrine использует столбец VARCHAR(255) для хранения значения dateinterval в MySQL, поэтому вам нужно будет соответствующим образом обновить таблицу базы данных.

Will B. 04.11.2018 10:29

Кеш полностью очищен. Однако я обнаружил, что в vendor / doctrine / dbal / lib / Doctrine / DBAL / Types нет ничего похожего на DateIntervalType.php, но он существует в проекте doctrine / dbal на GitHub: github.com/doctrine/dbal/tree/master/lib/Doctrine/DBAL/Types‌. Я посмотрел на некоторые другие проекты Symfony, которые у меня есть, и это то же самое. Даже установка нового проекта Symfony ничего не меняет. Любые идеи?

Midas 04.11.2018 10:48

Хорошо, у меня возникла проблема с моей версией php, из-за которой нельзя было использовать последнюю версию doctrine / dbal. Я запускаю свой проект с помощью Docker с php7.1, но на моем локальном компьютере установлен php7.0. При запуске обновления композитора он явно использовал неправильную версию php (7.0) и не жаловался на это ... Теперь я обновил своего поставщика изнутри контейнера, и он работает намного лучше. Спасибо fyrye за вашу помощь.

Midas 04.11.2018 12:45

@Midas, вы можете заставить свой композитор на вашем хосте вести себя так, как будто он имеет php 7.1, указав платформу из вашего контейнера докеров в разделе конфигурации вашего composer.json: getcomposer.org/doc/06-config.md#platform

dbrumann 04.11.2018 13:09

Хороший способ устранения неполадок @Midas DateIntervalType был представлен в Doctrine 2.6, для которого требуется PHP 7.1+. При использовании Docker или Vagrant я всегда отправляю обновления композитора из SSH гостевой ОС. Однако, если вы используете такую ​​IDE, как PHPStorm, я рекомендую загрузить PHP 7.1 в ОС вашего хоста и соответствующим образом обновить настройки интерпретатора PHP.

Will B. 04.11.2018 20:08

@dbrumann: также это приятная особенность композитора, версия композитора, которую я использую с php7.0.32, - это версия 1.0.0. Если я обновлю composer, он больше не будет работать с php7.0, и мне понадобится php7.1. И тогда мне бы этот конфиг больше не понадобился ...: D Но большое спасибо за информацию: я не знал об этом и сохраню его для дальнейшего использования.

Midas 05.11.2018 11:21

@Midas вы также можете использовать композитор для каждого приложения, загрузив composer.phar в каталог проекта, содержащий composer.json. Затем вы должны выпускать свои обновления из рабочего каталога вашего приложения, используя php composer.phar install и т. д., А не только composer. Это позволит вам сохранить версию, которая работает под 7.0 в вашей ОС хоста, и версию, специфичную для вашего приложения PHP 7.1.

Will B. 05.11.2018 15:01

@fyrye Я не уверен, что правильно понимаю: если я сделаю ваш выбор, загрузив composer.phar, файл composer.phar будет использовать версию php локальной машины, то есть 7.0. Но тогда это не сработает. Чтобы он заработал, мне все равно нужно будет войти в контейнер и запустить composer оттуда. Я прав?

Midas 06.11.2018 15:48

@Midas composer.phar похож на исполняемый файл. Если вы запустите php composer.phar ... из своей локальной системы, он будет использовать версию php, которую вы назначили своему PATH. Поэтому я рекомендую установить необходимую версию PHP, чтобы она соответствовала версии PHP гостевой ОС по отдельному пути. Затем при работе в этой среде используйте /path/to/php72/php composer.phar. В большинстве IDE, таких как PHPStorm, вы можете настроить remote interpreter, который будет выполнять PHP гостевой ОС при вводе команд.

Will B. 06.11.2018 16:34

@Midas Однако я хотел бы подчеркнуть, чтобы предотвратить проблемы совместимости, с которыми вы сталкиваетесь; Для установки библиотек рекомендуется использовать ТОЛЬКО гостевую ОС, в которой размещено ваше приложение. Таким образом, избегая требований и зависимостей, специфичных для гостевой ОС и хост-ОС.

Will B. 06.11.2018 16:45

@fyrye Да, я согласен с вашим последним комментарием, и я создал файл компоновки докеров переопределения, чтобы моя среда разработки была в рабочем состоянии. Таким образом, я смогу обновить моих поставщиков с правильной средой. Большое спасибо за вашу помощь и все ваши комментарии: все было действительно полезно.

Midas 06.11.2018 17:00
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
13
169
0

Другие вопросы по теме