Как настроить Sonata User Bundle с MongoDB

Sonata User Bundle с MongoDB настраивают через MongoDB ODM: сначала подключают Doctrine MongoDB Bundle, затем описывают document-модель пользователя, после этого связывают ее с Sonata. Перед настройкой обязательно проверьте совместимость версий Symfony, Sonata User Bundle и Doctrine MongoDB ODM: это не самый простой стек для нового проекта, и часть примеров в сети может относиться к старым версиям

Рабочая логика такая: MongoDB хранит пользователей как документы, Doctrine ODM отвечает за маппинг, Sonata дает административный интерфейс и пользовательскую часть

Что должно быть в проекте

Вам нужны три слоя:

  • Symfony-приложение;
  • Doctrine MongoDB ODM и MongoDB Bundle;
  • Sonata User Bundle с настройкой пользовательского класса.

Сначала убедитесь, что MongoDB запущена и приложение может подключиться к ней через MONGODB_URL или параметры конфигурации

Пример переменной окружения:

MONGODB_URL=mongodb://localhost:27017/sonata_app

Пример document-модели пользователя

Упрощенный пример:

<?php

namespace App\Document;

use Doctrine\ODM\MongoDB\Mapping\Annotations as ODM;
use Sonata\UserBundle\Model\User as BaseUser;

#[ODM\Document(collection: 'users')]
class User extends BaseUser
{
    #[ODM\Id]
    protected $id;
}

Смысл в том, что пользователь становится документом MongoDB, а не строкой SQL-таблицы

Конфигурация Doctrine MongoDB

Примерно так задается подключение:

doctrine_mongodb:
  connections:
    default:
      server: '%env(resolve:MONGODB_URL)%'
  default_database: sonata_app
  document_managers:
    default:
      auto_mapping: true

После этого проверьте, что Symfony видит document manager и может работать с MongoDB

Что проверить после настройки

Проверьте, создается ли коллекция users

Проверьте, сохраняется ли пользователь

Проверьте, открывается ли административный интерфейс Sonata

Проверьте, что класс пользователя указан именно как document-класс, а не entity-класс для ORM

Частые ошибки

Entity вместо Document

Если проект настроен под MongoDB ODM, пользователь должен быть document-моделью. Если случайно оставить ORM entity-настройки, Sonata будет искать SQL-слой

Несовместимые версии пакетов

Sonata, Symfony и Doctrine ODM чувствительны к версиям. Если установка падает на composer-конфликтах, не форсируйте зависимости вслепую: сначала проверьте официальные требования пакетов

Пользователь не сохраняется

Проверьте подключение к MongoDB, document manager, namespace модели и маппинг. Если база доступна, но коллекция не появляется, чаще всего проблема в конфигурации ODM

Админка открывается, но данные пустые

Проверьте, в той ли базе и коллекции вы смотрите данные. MongoDB может быть подключена к другой базе из переменной окружения

Когда стоит выбрать другой путь

Если вы начинаете новый проект и вам нужен простой пользовательский модуль, иногда быстрее собрать авторизацию на стандартной Symfony Security-системе и MongoDB ODM без Sonata User Bundle. Sonata полезна, когда вам действительно нужен административный интерфейс и вы готовы поддерживать связку пакетов

Что почитать дальше по MongoDB

Если нужен общий маршрут по теме, откройте рубрику MongoDB. Для соседних задач пригодятся эти разборы:

Как проверить результат на практике

Для MongoDB-материала полезно делать три проверки: сначала выполнить команду на маленьком наборе тестовых документов, затем посмотреть результат через find() или MongoDB Compass, а после этого повторить действие на копии реальной структуры данных. Если запрос меняет документы, сначала запускайте его с фильтром на один документ и только потом расширяйте условие

Еще одна хорошая привычка — записывать исходное состояние и ожидаемый результат. Например: было три документа, после обновления изменился только один; был массив из пяти элементов, после операции остался нужный элемент; индекс появился в getIndexes(). Такая проверка быстро показывает, что вы исправили именно задачу, а не просто получили команду без ошибки

Оцените статью
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x