Хобрук: Ваш путь к мастерству в программировании

doctrine2-spatial как использовать многострочный тип

Я использую Symfony 4 и Doctrine2-Spatial. Документация руководство по настройке гласит:

Добавьте типы и функции, которые вам нужны, в файл конфигурации Symfony. Имена типов доктрин не жестко запрограммированы».

И есть пример:

doctrine:
dbal:
    types:
        geometry:   CrEOF\Spatial\DBAL\Types\GeometryType
        point:      CrEOF\Spatial\DBAL\Types\Geometry\PointType
        polygon:    CrEOF\Spatial\DBAL\Types\Geometry\PolygonType
        linestring: CrEOF\Spatial\DBAL\Types\Geometry\LineStringType

Мне нужно использовать тип MultiLineString, но такого класса типа нет в каталоге CrEOF\Spatial\DBAL\Types\Geometry\. Я добавил MultiLineStringType (копию класса LineStringType) в свой каталог App\Doctrine и добавил строку в конфигурацию доктрины следующим образом:

multilinestring: App\Doctrine\MultiLineStringType

Затем в моем контроллере я делаю следующее:

$parser = new \CrEOF\Geo\WKT\Parser($multilinestring);
$geo = $parser->parse();
$path = new \CrEOF\Spatial\PHP\Types\Geometry\MultiLineString($geo['value']);
$route->setPath($path); // The multilinestring field type

Но затем, когда я сохраняю свою сущность доктрины, я получаю исключение

Значения столбцов Geometry должны реализовывать GeometryInterface

Пожалуйста помогите. Что я делаю неправильно? Документация очень плохая...

UPD: Если я помещаю многострочные данные с помощью собственного SQL-запроса следующим образом:

UPDATE Routes SET Path=PolyFromText(MULTILINESTRING (....)) WHERE Id=1

а потом получить данные через ORM $entity->getPath() У меня получился нормальный CrEOF\Spatial\PHP\Types\Geometry\MultiLineString объект. Итак, я предполагаю, что проблема в моем контроллере, где я пытаюсь установить объект MultiLineString.


Ответы:


1

Вы можете просто изменить:

doctrine:
    dbal:
        types:
            geometry:   CrEOF\Spatial\DBAL\Types\GeometryType
            point:      CrEOF\Spatial\DBAL\Types\Geometry\PointType
            polygon:    CrEOF\Spatial\DBAL\Types\Geometry\PolygonType
            linestring: CrEOF\Spatial\DBAL\Types\Geometry\LineStringType

в это:

doctrine:
    dbal:
        types:
            geometry:        CrEOF\Spatial\DBAL\Types\GeometryType
            point:           CrEOF\Spatial\DBAL\Types\Geometry\PointType
            polygon:         CrEOF\Spatial\DBAL\Types\Geometry\PolygonType
            linestring:      CrEOF\Spatial\DBAL\Types\Geometry\LineStringType
            multilinestring: CrEOF\Spatial\DBAL\Types\Geometry\MultiLineStringType
12.11.2018
  • В папке CrEOF\Spatial\DBAL\Types\Geometry нет класса MultiLineStringType 12.11.2018
  • Ваш собственный MultiLineStringType расширяет GeometryType CrEOF? 12.11.2018
  • Да, конечно. Вот код: namespace App\Doctrine; используйте CrEOF\Spatial\DBAL\Types\GeometryType; класс MultiLineStringType расширяет GeometryType {} 12.11.2018
  • Новые материалы

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

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

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..