Это эпопея началась с потребностью работать с документоориентированной базой данных. В качестве СУБД(Система Управления Базами Данных) было принято решение использовать MongoDB. Проект, в котором это делалось писался на Symfony 4 и поэтомулёг встал вопрос: «Как это всё так сделать, чтобы ух!»
Начнём с самого простого и самого важного — установки MongoDB.
Нас интересует только первый шаг, поэтому я приведу его в явном виде:
sudo apt update
sudo apt install -y mongodb
Эти две команды устанавливают Mongo на ваш компьютер и теперь выкороль можете с ним работать.Там же, где приведена установка, есть всяческие штучки, чтобы понять, что MongoDB действительно установилось.
Дальше приступим к точнейшей настройки Symfony.Основной гайдинтересен и занимателен, но если у вас аллергия на английский — оставайтесь с нами).
Как говорит автор: «…бла бла бла, давайте установим эти два пакета: «
"alcaeus/mongo-php-adapter" "doctrine/mongodb-odm-bundle"
Устанавливаются они крайне просто черезcomposerи вдобавокalcaeusуже установлен вместе сPHP 7. После установки этих пакетов пришло время внести поправки в конфигурацию, а точнее вconfig/packages/doctrine.yaml. Смелее жми на этот файлик!
parameters:
# Adds a fallback DATABASE_URL if the env var is not set.
# This allows you to run cache:warmup even if your
# environment variables are not available yet.
# You should not need to change this value.
env(DATABASE_URL): ''
doctrine:
dbal:
# configure these for your database server
driver: 'pdo_mysql'
server_version: '5.7'
charset: utf8mb4
default_table_options:
charset: utf8mb4
collate: utf8mb4_unicode_ci
# With Symfony 3.3, remove the `resolve:` prefix
url: '%env(resolve:DATABASE_URL)%'
orm:
auto_generate_proxy_classes: '%kernel.debug%'
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
mappings:
App:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity'
prefix: 'App\Entity'
alias: App
doctrine_mongodb:
connections:
default:
server: "%mongodb_server%"
options: {}
default_database: yourdbnamehere
document_managers:
default:
auto_mapping: true
mappings:
App:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Document'
prefix: 'App\Document'
alias: App
После внесения изменений файл должен выглядит примерно так.Очень важнони чего не удалять из этого файла, как и из других, если ты не понимаешь, что делаешь).
Поскольку будем использовать именно Mongo Document, нужно создать папку вsrcпод названием«Document». Как вы можете видеть выше, «mongodb_server» должен быть определён где-то. Автор рекомендует поместить вservices.yamlи после этого помещения это будет выглядеть как-то так:
# Put parameters here that don't need to change on each machine where the app is deployed
# https://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration
parameters:
mongodb_server: "mongodb://localhost:27017"
services:
# default configuration for services in *this* file
_defaults:
autowire: true # Automatically injects dependencies in your services.
autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.
public: false # Allows optimizing the container by removing unused services; this also means
# fetching services directly from the container via $container->get() won't work.
# The best practice is to be explicit about your dependencies anyway.
# makes classes in src/ available to be used as services
# this creates a service per class whose id is the fully-qualified class name
App\:
resource: '../src/*'
exclude: '../src/{Entity,Migrations,Tests,Kernel.php}'
# controllers are imported separately to make sure services can be injected
# as action arguments even if you don't extend any base controller class
App\Controller\:
resource: '../src/Controller'
tags: ['controller.service_arguments']
# add more service definitions when explicit configuration is needed
# please note that last definitions always *replace* previous ones
Если composer не внёс изменений вbundles.php, нужно ему в этом помочь. После (или до) вашей помощи, должна быть вот такая строка:
Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle::class => ['all' => true],
Мы изменили 3 файла. Не больше не меньше (пересчитай и верни на место то, что изменил не по статье). Так же вэтой статьеприводится способ проверки корректности действий и пример структуры Mongo Document’а. Думаю, что читатель, если захочет, справится с этим и без моего чуткого руководства. Долгих дней и приятных ночей!