Я начинаю новый проект с использованием 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
. Я прав?