Payum Bundle Configuration - symfony

I am struggling to define entity mapper found here:
https://github.com/Payum/PayumBundle/blob/master/Resources/doc/capture_funds_with_paypal_express_checkout.md#2-a-configure-doctrine-storage
payum:
contexts:
your_context_name:
doctrine_storage:
driver: orm
model_class: AcmeDemoBundle\Entity\PaypalPaymentInstruction
doctrine:
orm:
entity_managers:
default:
mappings:
payum_paypal_express_checkout_nvp:
is_bundle: false
type: xml
dir: %kernel.root_dir%/../vendor/payum/paypal-express-checkout-nvp/src/Payum/Paypal/ExpressCheckout/Nvp/Bridge/Doctrine/Resources/mapping
prefix: Payum\Paypal\ExpressCheckout\Nvp\Bridge\Doctrine\Entity
My current doctrine configuration is having an autoload to true. Problem I have is to make this mapping work with my autoload: true
I can get mapping to work when i remove my autoload: true but
Any tips would be much appreciated, but question is how do i create a table from this mapping information?

This config works well for me. It added an id feild(it is come from bundle and was automapped) and the rest field come from manually defined mapping.
I added an example to sandbox. It works fine.
doctrine:
dbal:
driver: %database_driver%
host: %database_host%
port: %database_port%
dbname: %database_name%
user: %database_user%
password: %database_password%
charset: UTF8
# if using pdo_sqlite as your database driver, add the path in parameters.yml
# e.g. database_path: %kernel.root_dir%/data/data.db3
# path: %database_path%
orm:
auto_generate_proxy_classes: %kernel.debug%
auto_mapping: true
mappings:
payum_paypal_express_checkout_nvp:
is_bundle: false
type: xml
dir: %kernel.root_dir%/../vendor/payum/paypal-express-checkout-nvp/src/Payum/Paypal/ExpressCheckout/Nvp/Bridge/Doctrine/Resources/mapping
prefix: Payum\Paypal\ExpressCheckout\Nvp\Bridge\Doctrine\Entity

Related

Multiple db connections symfony

I work with multiple db connections
should i use multiple entity managers ?, and what can i do with mapping ?
i use the same entity folder but i need to connect to many DBs.
This is the file : config/packages/doctrine.yaml dbal
doctrine:
dbal:
default_connection: default
connections:
default:
server_version: "%server_version%"
driver: pdo_mysql
url: '%env(resolve:DATABASE_URL)%'
slave:
server_version: "%server_version%"
driver: pdo_mysql
url: '%env(resolve:DATABASE_SLAVE_URL)%'
orm part
orm:
auto_generate_proxy_classes: false
default_entity_manager: default
entity_managers:
default:
connection: default
mappings:
App:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity'
prefix: 'App\Entity'
slave:
connection: default

Doctrine.yaml" does not contain valid YAML: A colon cannot be used in an unquoted mapping value

I have seen similair questions being asked but did not find my answer.
Most were typo's of some kind and that could be true for me but ive been staring at this for an hour now and cannot find one, maybe someone else can I would really appreciate it!
doctrine:
dbal:
default_connection: default
connections:
default:
#User DB
url: '%env(resolve:DATABASE_URL)%'
driver: 'pdo_mysql'
server_version: '5.7'
charset: utf8mb4
mededelingen:
#mededelingen DB
url: '%env(resolve:DATABASE_MEDEDELINGEN_URL)%'
driver: 'pdo_mysql'
server_version: '5.7'
charset: utf8mb4
# IMPORTANT: You MUST configure your server version,
# either here or in the DATABASE_URL env var (see .env file)
#server_version: '13'
orm:
auto_generate_proxy_classes: true
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
default:
connection: default
mappings:
users:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity'
prefix: 'App\Entity\User'
alias: App
mededelingen:
connection: mededelingen
mappings:
Mededelingen:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity'
prefix: 'App\Entity\Mededeling'
alias: Mededeling
line 41 (near " alias: Mededeling")
I tried to fix your issue using my linter.
First, you missed the property entity_managers after orm, then I had to move naming_strategy and auto_mapping
auto_mapping can only be used on one entity manager so I set it on default.
The result which cause no issue for me:
doctrine:
dbal:
default_connection: default
connections:
default:
#User DB
url: '%env(resolve:DATABASE_URL)%'
driver: 'pdo_mysql'
server_version: '5.7'
charset: utf8mb4
mededelingen:
#mededelingen DB
url: '%env(resolve:DATABASE_MEDEDELINGEN_URL)%'
driver: 'pdo_mysql'
server_version: '5.7'
charset: utf8mb4
# IMPORTANT: You MUST configure your server version,
# either here or in the DATABASE_URL env var (see .env file)
#server_version: '13'
orm:
entity_managers:
auto_generate_proxy_classes: true
default:
connection: default
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
mappings:
users:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity'
prefix: 'App\Entity\User'
alias: App
mededelingen:
connection: mededelingen
naming_strategy: doctrine.orm.naming_strategy.underscore
mappings:
Mededelingen:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity'
prefix: 'App\Entity\Mededeling'
alias: Mededeling

Unknown Entity namespace alias in Symfony by Guard authentication

I am working on an Guard authentication with 2 separate entity managers.
Here my config:
doctrine:
dbal:
default_connection: default
connections:
default:
driver: pdo_mysql
host: '%database_host%'
port: '%database_port%'
dbname: '%database_name%'
user: '%database_user%'
password: '%database_password%'
charset: UTF8
backoffice:
driver: pdo_mysql
host: '%database_backoffice_host%'
port: '%database_backoffice_port%'
dbname: '%database_backoffice_name%'
user: '%database_backoffice_user%'
password: '%database_backoffice_password%'
charset: UTF8
orm:
auto_generate_proxy_classes: "%kernel.debug%"
default_entity_manager: default
entity_managers:
default:
connection: default
mappings:
AppBundle: ~
CarBundle: ~
backoffice:
connection: backoffice
mappings:
BackofficeBundle: ~
This is my security setting
services:
backoffice.form_login_authenticator:
class: BackofficeBundle\Security\FormLoginAuthenticator
arguments: ["#router", "#security.password_encoder", "#doctrine.orm.backoffice_entity_manager"]
After the login form, the user is found and there is an redirect to my main route /backofice , but I become this error:
[2017-05-07 18:32:56] request.INFO: Matched route "backoffice_home". {"route":"backoffice_home","route_parameters":{"_controller":"BackofficeBundle\\Controller\\DefaultController::indexAction","_route":"backoffice_home"},"request_uri":"http://ip/backoffice","method":"GET"} []
[2017-05-07 18:32:56] security.DEBUG: Read existing security token from the session. {"key":"_security_main"} []
[2017-05-07 18:32:56] request.CRITICAL: Uncaught PHP Exception Doctrine\ORM\ORMException: "Unknown Entity namespace alias 'BackofficeBundle'." at /home/metahub/autotrader/vendor/doctrine/orm/lib/Doctrine/ORM/ORMException.php line 271 {"exception":"[object] (Doctrine\\ORM\\ORMException(code: 0): Unknown Entity namespace alias 'BackofficeBundle'. at /home/metahub/autotrader/vendor/doctrine/orm/lib/Doctrine/ORM/ORMException.php:271)"} []
The solution is this:
security:
encoders:
BackofficeBundle\Entity\User: bcrypt
providers:
database_users:
entity:
class: BackofficeBundle:User
property: username
manager_name: backoffice
We need to setup the manager "manager_name" for this Entity direct in the security settings.
try using auto_mapping: true
orm:
auto_generate_proxy_classes: "%kernel.debug%"
default_entity_manager: default
entity_managers:
default:
connection: default
auto_mapping: true
mappings:
AppBundle: ~
CarBundle: ~
backoffice:
connection: backoffice
auto_mapping: true
mappings:
BackofficeBundle: ~

How to have DBAL's setSQLLogger in symfony

I was able to connect to doctrine in symfony2, this way:
# Doctrine Configuration
doctrine:
dbal:
default_connection: default
connections:
default:
driver: "%database_driver%"
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
mapping_types:
enum: string
orm:
auto_generate_proxy_classes: false
proxy_namespace: Proxies
proxy_dir: Proxies
default_entity_manager: default # The first defined is used if not set
entity_managers:
default:
connection: default
mappings: # Required
ApplicationUserBundle:
type: annotation
class_metadata_factory_name: Doctrine\ORM\Mapping\ClassMetadataFactory
dql:
datetime_functions:
UNIX_TIMESTAMP: DoctrineExtensions\Query\Mysql\UnixTimestamp
Now my question is that how to have this in configuration above?
$config->setSQLLogger(new Doctrine\DBAL\Logging\EchoSQLLogger());
I mean another way than this. As this is a $config method I guess that should be possible to have it in config.yml, but how?
You need to fill few config parameters
In doctrine.yaml config file enable logging
doctrine:
dbal:
logging: true
In services.yaml config file set logger class
services:
doctrine.dbal.logger:
class: Doctrine\DBAL\Logging\EchoSQLLogger
Do not forget to clean Symfony cache before usage php bin/console cache:clear

Column not found with Translatable in Symfony2

Hi want to use the Translatable Behaviour from the Doctrine Extensions ins Symfony2.
I use Doctrine and after some tries with my own classes I 100% copied the Article class from
http://gediminasm.org/article/translatable-behavior-extension-for-doctrine-2
in my project and only adapted the namespace. But I get an Exception:
[2/2] DBALException: An exception occurred while executing 'SELECT t0.id AS id1, t0.title AS title2, t0.content AS content3 FROM articles t0 WHERE t0.id = ?' with params {"1":1}:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 't0.content' in 'field list'
The MySql Query that is sent is
SELECT t0.id AS id1, t0.title AS title2, t0.content AS content3 FROM articles t0 WHERE t0.id = 1
Why does Doctrine/Symfony tries to access articles instead of ext_translations. If I use a TranslationEntity, everything works fine, so I am sure, that the translatable is activated in my config. But here is my config to make everything clear
config.yml
doctrine:
dbal:
default_connection: default
connections:
default:
driver: %database_driver%
host: %database_host%
port: %database_port%
dbname: %database_name%
user: %database_user%
password: %database_password%
charset: UTF8
mapping_types:
orm:
auto_generate_proxy_classes: %kernel.debug%
default_entity_manager: default
entity_managers:
default:
auto_mapping: true
mappings:
gedmo_translatable:
type: annotation
prefix: Gedmo\Translatable\Entity
dir: "%kernel.root_dir%/../vendor/gedmo/doctrine-extensions/lib/Gedmo/Translatable/Entity"
alias: GedmoTranslatable # this one is optional and will default to the name set for the mapping
is_bundle: false
gedmo_translator:
type: annotation
prefix: Gedmo\Translator\Entity
dir: "%kernel.root_dir%/../vendor/gedmo/doctrine-extensions/lib/Gedmo/Translator/Entity"
alias: GedmoTranslator # this one is optional and will default to the name set for the mapping
is_bundle: false
gedmo_loggable:
type: annotation
prefix: Gedmo\Loggable\Entity
dir: "%kernel.root_dir%/../vendor/gedmo/doctrine-extensions/lib/Gedmo/Loggable/Entity"
alias: GedmoLoggable # this one is optional and will default to the name set for the mapping
is_bundle: false
gedmo_tree:
type: annotation
prefix: Gedmo\Tree\Entity
dir: "%kernel.root_dir%/../vendor/gedmo/doctrine-extensions/lib/Gedmo/Tree/Entity"
alias: GedmoTree # this one is optional and will default to the name set for the mapping
is_bundle: false
stof_doctrine_extensions:
default_locale: en_us
translation_fallback: true
orm:
default:
timestampable: true
translatable: true
sluggable: true
Does anyone has an idea why this is not working? Thanks a lot for your help

Resources