Использование Doctrine Uuid с Sonata Admin Bundle для Symfony - PullRequest
0 голосов
/ 23 сентября 2019

У меня проблемы с тем, чтобы Sonata Admin Bundle работал с Uuid Рэмси в качестве идентификатора объекта.

Это ошибка, которую я получаю, когда пытаюсь показать список стран (/ admins / app / country / list))

enter image description here

enter image description here

Исключение было выдано во время рендерингаtemplate («Запрошен неизвестный тип базы данных uuid, Doctrine \ DBAL \ Platforms \ MySQL57Platform может не поддерживать его».).

doctrine.yaml

doctrine:
    dbal:
        types:
            uuid: Ramsey\Uuid\Doctrine\UuidType

services.yaml

sonata.admin.country:
    class: App\Admin\CountryAdmin
    arguments: [~, App\Entity\Country, ~]
    tags:
        - { name: sonata.admin, manager_type: orm, group: Entities, label: Country }

App \ Entity \ Country

class Country
{ 
    /**
     * @ORM\Id
     * @ORM\Column(type="uuid", unique=true)
     * @ORM\GeneratedValue(strategy="CUSTOM")
     * @ORM\CustomIdGenerator(class="Ramsey\Uuid\Doctrine\UuidGenerator")
     */
    protected $id;

App \ Admin \ Country

final class CountryAdmin extends Sonata\AdminBundle\Admin\AbstractAdmin
{    
    protected function configureRoutes(RouteCollection $collection)
    {
        $collection
            ->add('show_country', sprintf('%s/show_country', $this->getRouterIdParameter()));
    }
}

Приложение \ Контроллер \ Admin \ CountryController

class CountryController extends Sonata\AdminBundle\Controller\CRUDController
{
    public function showCityAction(Request $request): Response
    {
        /** @var Country $country */
        $country = $this->admin->getSubject();

        if (!$country) {
            $id = $request->get($this->admin->getIdParameter());
            throw $this->createNotFoundException(sprintf(
                'Unable to find the object with id : %s',
                $id
            ));
        }

        return $this->renderWithExtraParams('admin/city/show_country.html.twig', [
            'show_country' => $country,
        ]);
    }
}

composer.json

    "sonata-project/admin-bundle": "^3.53",
    "sonata-project/doctrine-orm-admin-bundle": "^3.10",
    "sonata-project/translation-bundle": "^2.4",
    "sonata-project/user-bundle": "^4.4",
    "stof/doctrine-extensions-bundle": "^1.3",
    "sonata-project/easy-extends-bundle": "^2.5",
    "ramsey/uuid-doctrine": "^1.5"

Itкажется, что тип Uuid не загружен, хотя он находится в конфигурационном файле doctrine.yaml.Я попытался включить его вручную в bootstrap.php:

\Doctrine\DBAL\Types\Type::addType('uuid', 'Ramsey\Uuid\Doctrine\UuidType');

, но я просто получаю сообщение об ошибке, говорящее, что тип уже включен.

Я понял, что vendor/sonata-project/doctrine-extensions/src/Types содержит только JsonType.php.Может ли быть так, что Uuid.php отсутствует?Или я что-то упускаю?Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 23 сентября 2019

Я наконец нашел ответ на этот вопрос.Все, что мне нужно было сделать, это добавить две строки в файл doctrine.yaml :

doctrine:
    dbal:
        types:
            uuid: Ramsey\Uuid\Doctrine\UuidType
        mapping_types:   <---
            uuid: uuid   <---

Я надеюсь, что это может кому-то помочь, потому что лично я не мог найти информацию где-либо наинтернет!

...