Подключение к базе данных Symfony 4 Flex с использованием `urlencode` - PullRequest
0 голосов
/ 15 мая 2018

Я начинаю новый проект с использованием Symfony 4 + Flex. В настоящее время я пытаюсь подключить свое новое приложение к базе данных MySQL.

Я следую документации Symfony , и я уже добавил doctrine к своим зависимостям:

composer require doctrine
composer require maker --dev

Затем я добавил информацию о соединении с базой данных в переменную окружения DATABASE_URL, определенную внутри .env, например:

###> doctrine/doctrine-bundle ###
DATABASE_URL=mysql://myUser:myPasswordWithSpecialChars@127.0.0.1:3306/myDbName
###< doctrine/doctrine-bundle ###

На данный момент я столкнулся с проблемой:

DBALException

Неверный параметр "url".

Я думаю, это связано с тем, что в моем пароле MySQL используются некоторые специальные символы. В документации об этом говорится:

Если имя пользователя, пароль или имя базы данных содержат какой-либо символ, считающийся специальным в URI (например,!, @, $, #), Вы должны их кодировать. См. RFC 3986 для полного списка зарезервированных символов или используйте функцию urlencode для их кодирования.

Я не совсем понимаю, как или где использовать функцию urlencode , поскольку файл .env не является PHP-файлом (как doctrine.yaml).

Кто-то уже использовал функцию urlencode для кодирования пароля MySQL, содержащего специальные символы?

Спасибо.

EDIT

Это мой 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: utf8
        default_table_options:
            charset: utf8
            collate: utf8_unicode_ci

        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

Я не редактировал параметр url базы данных, потому что он уже определен в .env. Я прав?

1 Ответ

0 голосов
/ 15 мая 2018

попробуйте изменить это:

url: '%env(resolve:DATABASE_URL)%'

на это:

url: '%env(DATABASE_URL)%'
...