使用`urlencode`连接Symfony 4 Flex数据库

时间:2018-05-15 09:20:39

标签: php mysql symfony doctrine symfony4

我正在使用Symfony 4 + Flex开始一个新项目。这时我正在尝试将我的新应用程序连接到MySQL数据库。

我正在关注Symfony Documentation,我已将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密码进行编码?

感谢。

修改

这是我的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 :(得分:3)

尝试改变这个:

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

到此:

url: '%env(DATABASE_URL)%'