Doctrine change UTF8 encoding to html entities when saving data in database - php

I don't know where this problem is coming from although I did not touch doctrin's configuration but when I send to database a word with special characters like this (RĂ©paration) doctrine save it this way (RĂ©paration) !!
I'm using latin1_swedish_ci as Interclassement in both database and table.
and this is doctrin's configuration in config.yml file:
# Doctrine Configuration
doctrine:
dbal:
driver: pdo_mysql
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
What am I doing wrong ?
UPDATE:
I just found that only one column save data this way if I use another column date are saved correctly !!
How do you explain this ?

try this.
# Doctrine Configuration
doctrine:
dbal:
driver: pdo_mysql
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
options:
1002: "SET NAMES 'UTF8'"
1002 is the value for the constant PDO::MYSQL_ATTR_INIT_COMMAND

I found where this problem is coming from:
It was from tinymce (the WYSIWYG editor) that converts the special characters to html_entities.

Related

No transport supports the given Messenger DSN doctrine

I am getting an error No transport supports the given Messenger DSN "doctrine://default" when executing command messenger:setup-transports for Symfony messenger.
Handling messages synchronously for the message, handler, and dispatcher works.
Symfony: 4.4.2
Symfony/messenger: 4.4
doctrine/orm: 2.7
messenger.yml
messenger:
default_bus: messenger.bus.default
transports:
async: 'doctrine://default'
doctrine.yml
doctrine:
dbal:
default_connection: default
connections:
default:
driver: "%database_driver%"
port: "%database_port%"
host: "%database_host%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"

Codeception acceptance tests with Symfonys MasterSlaveConnection throws Exception

I'm using codeception (acceptance tests) in combination with the Symfony and Doctrine2 modules.
When I configure Symfony to use a single database connection, everything works fine and my tests finish. But as soon as I add database slave connections, the following exception appears and the test failes:
1) SomeCest: Some test
Test tests/acceptance/SomeCest.php:someTest
[PHPUnit\Framework\Exception] Undefined property: Doctrine\DBAL\Connections\MasterSlaveConnection::$_conn
#1 /var/www/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connections/MasterSlaveConnection.php:154
#2 Codeception\Subscriber\Module->before
#3 /var/www/vendor/symfony/symfony/src/Symfony/Component/EventDispatcher/EventDispatcher.php:184
#4 /var/www/vendor/symfony/symfony/src/Symfony/Component/EventDispatcher/EventDispatcher.php:46
I cannot understand how this error arises, because in the stated file (MasterSlaveConnection.php) the class is clearly extended from Connection, in which the property $_conn is defined.
Can someone help me with that? Is this a bug and I should open up a bug report on the codeception github page? Or am I doing something wrong? Thank you in advance!
acceptance.suite.yml:
actor: AcceptanceTester
modules:
enabled:
- Symfony:
part: SERVICES
environment: 'prod'
- Doctrine2:
depends: Symfony
cleanup: false
- WebDriver:
url: 'http://localhost/'
browser: phantomjs
restart: true
clear_cookies: true
log_js_errors: true
window_size: 1960x1080
app/config/config.yml with single database configuration:
doctrine:
dbal:
driver: "%database_driver%"
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
app/config/config.yml with multiple database configuration:
doctrine:
dbal:
driver: "%database_driver%"
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
slaves:
slave1:
host: "%database_host2%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
slave2:
host: "%database_host3%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
I'm using symfony 2.8.25 and codeception 2.3.4

Doctrine. Injecting additional parameter into dbal configuration

I have MySQL cluster with master server and 4 slaves.
The site based on Symfony3, Doctrine is used as ORM and DBAL.
My config for Doctrine looks like this:
doctrine:
dbal:
default_connection: default
connections:
default:
dbname: "%default_db_master_name%"
host: "%default_db_master_host%"
port: "%default_db_master_port%"
user: "%default_db_master_user%"
password: "%default_db_master_password%"
charset: UTF8
driver: "%default_db_master_driver%"
logging: "%kernel.debug%"
profiling: "%kernel.debug%"
wrapper_class: AppBundle\Connection\AppMasterSlaveConnection
mapping_types:
enum: string
slaves:
slave1:
host: "%default_db_slave1_host%"
port: "%default_db_slave_port%"
dbname: "%default_db_slave_name%"
user: "%default_db_slave_user%"
password: "%default_db_slave_password%"
slave2:
host: "%default_db_slave2_host%"
port: "%default_db_slave_port%"
dbname: "%default_db_slave_name%"
user: "%default_db_slave_user%"
password: "%default_db_slave_password%"
I would like to add weights for slaves, because they hardware is not equal, some of them are more productive, some less.
Also I would like to inject memcache service (or inject params for creating cache service object) for putting temporarely dns which are overloaded by requests and give them chance to back to normal.
For example, I want to inject weight param for slaves following way:
slave1:
host: "%default_db_slave1_host%"
port: "%default_db_slave_port%"
dbname: "%default_db_slave_name%"
user: "%default_db_slave_user%"
password: "%default_db_slave_password%"
weight: "%default_db_slave1_weight%"
slave2:
host: "%default_db_slave2_host%"
port: "%default_db_slave_port%"
dbname: "%default_db_slave_name%"
user: "%default_db_slave_user%"
password: "%default_db_slave_password%"
weight: "%default_db_slave2_weight%"
When I add this option, I receive an error
InvalidConfigurationException in ArrayNode.php line 317:
Unrecognized option "weight" under "doctrine.dbal.connections.default.slaves.slave1"
I don't know how to do it. I have just one idea, transfer all these params via Driver options,something like this
logging: "%kernel.debug%"
profiling: "%kernel.debug%"
wrapper_class: AppBundle\Connection\AppMasterSlaveConnection
options:
slave1: 5
slave2: 25
slave3: 45
slave4: 25
cache: '%memcached_db%'
mapping_types:
enum: string
slaves:
slave1:
But it looks awful.
Help me please.

Symfony2 default configuration parameters

Is it possible to have a default configuration parameters in Symfony yeml configuration file. In case where the variable parameter is not available. For example. I have database name coming from Apache configuration, but if I run a command I would like to go with a default database, see below. The example is kind of twigi'ish
doctrine:
dbal:
driver: pdo_mysql
host: "%database_host%"
port: "%database_port%"
dbname: "%database.name%"|default('database1')
user: "%database_user%"
password: "%database_password%"
The only way to do that would be to set the parameter to a default value, which I assume would be early in the configuration file. A theoretic example:
parameters:
foo: bar
imports:
- { resource: parameters.yml }
If parameters.yml contains a definition for the %foo% parameter, it will overwrite the previous definition. If parameter.yml does not contain a definition for %foo% however, it will use the earlier defined (default) value.
You can put your default configuration in parameters.yml.dist, this way when someone new joins the project and runs:
composer install
or
composer update
He will be prompted to provide his environment specific values and so parameters.yml will be created.
I figured out a way around this problem by using "database_prefix" as the default database and other databases just add a suffix to that.
doctrine:
dbal:
driver: pdo_mysql
host: "%database_host%"
port: "%database_port%"
dbname: "database_prefix%database.name%"
user: "%database_user%"
password: "%database_password%"

Doctrine connection with db

I am about to start a project in doctrine symfony, but I have to make connection with multiple databases. One of them is an existing database (SQL SERVER) that cannot be mapped with ORM. Is there any possibility to connect with this db with another db that is NOT mapped in doctrine and work with controllers normally?
I develop a multi-database sf2 app with doctrine2 orm mapping.
We use intellectsoft-uk/MssqlBundle
Our configuration is:
config.yml
# Doctrine Configuration
doctrine:
dbal:
default_connection: acme_mysql
connections:
acme_mysql:
host: %acme_mysql_database_host%
port: %acme_mysql_database_port%
dbname: %acme_mysql_database_name%
user: %acme_mysql_database_user%
password: %acme_mysql_database_password%
charset: UTF8
acme_slqsrv:
driver: sqlsrv
driver_class: \Realestate\MssqlBundle\Driver\PDODblib\Driver
host: %acme_slqsrv%
port: %acme_slqsrv%
dbname: %acme_slqsrv%
user: %acme_slqsrv%
password: %acme_slqsrv%
charset: UTF8
orm: #optional if you want to map some entity in doctrine2
auto_generate_proxy_classes: %kernel.debug%
default_entity_manager: acme_mysql
entity_managers:
em_mysql:
connection: acme_mysql
mappings:
AcmeMysqlBundle: ~
em_sqlsrv:
connection: acme_sqlsrv
mappings:
AcmeSqlSrvBundle: ~
This configuration permit you to take a connection instance in a controller/service and use it for access database and execute stored procedures and so on...
Hope this help

Categories