From 10e5f3b3dff836fdb69b1c3e5de7a2ee4d2d4aa1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Haso=C5=88?= Date: Thu, 6 Dec 2012 09:03:32 +0100 Subject: [PATCH 1/6] Removed useless branch alias for dev-master in composer.json --- composer.json | 7 +------ src/Symfony/Bridge/Doctrine/composer.json | 7 +------ src/Symfony/Bridge/Monolog/composer.json | 7 +------ src/Symfony/Bridge/Propel1/composer.json | 7 +------ src/Symfony/Bridge/Swiftmailer/composer.json | 7 +------ src/Symfony/Bridge/Twig/composer.json | 7 +------ src/Symfony/Bundle/FrameworkBundle/composer.json | 7 +------ src/Symfony/Bundle/SecurityBundle/composer.json | 7 +------ src/Symfony/Bundle/TwigBundle/composer.json | 7 +------ src/Symfony/Bundle/WebProfilerBundle/composer.json | 7 +------ src/Symfony/Component/BrowserKit/composer.json | 7 +------ src/Symfony/Component/ClassLoader/composer.json | 7 +------ src/Symfony/Component/Config/composer.json | 7 +------ src/Symfony/Component/Console/composer.json | 7 +------ src/Symfony/Component/CssSelector/composer.json | 7 +------ src/Symfony/Component/DependencyInjection/composer.json | 7 +------ src/Symfony/Component/DomCrawler/composer.json | 7 +------ src/Symfony/Component/EventDispatcher/composer.json | 7 +------ src/Symfony/Component/Filesystem/composer.json | 7 +------ src/Symfony/Component/Finder/composer.json | 7 +------ src/Symfony/Component/Form/composer.json | 7 +------ src/Symfony/Component/HttpFoundation/composer.json | 7 +------ src/Symfony/Component/HttpKernel/composer.json | 7 +------ src/Symfony/Component/Locale/composer.json | 7 +------ src/Symfony/Component/OptionsResolver/composer.json | 7 +------ src/Symfony/Component/Process/composer.json | 7 +------ src/Symfony/Component/Routing/composer.json | 7 +------ src/Symfony/Component/Security/composer.json | 7 +------ src/Symfony/Component/Serializer/composer.json | 7 +------ src/Symfony/Component/Templating/composer.json | 7 +------ src/Symfony/Component/Translation/composer.json | 7 +------ src/Symfony/Component/Validator/composer.json | 7 +------ src/Symfony/Component/Yaml/composer.json | 7 +------ 33 files changed, 33 insertions(+), 198 deletions(-) diff --git a/composer.json b/composer.json index c80d3253ee..057917bf00 100644 --- a/composer.json +++ b/composer.json @@ -67,10 +67,5 @@ "SessionHandlerInterface": "src/Symfony/Component/HttpFoundation/Resources/stubs" } }, - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - } + "minimum-stability": "dev" } diff --git a/src/Symfony/Bridge/Doctrine/composer.json b/src/Symfony/Bridge/Doctrine/composer.json index 7f28419f5b..37a7a6e66a 100644 --- a/src/Symfony/Bridge/Doctrine/composer.json +++ b/src/Symfony/Bridge/Doctrine/composer.json @@ -30,10 +30,5 @@ "psr-0": { "Symfony\\Bridge\\Doctrine": "" } }, "target-dir": "Symfony/Bridge/Doctrine", - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - } + "minimum-stability": "dev" } diff --git a/src/Symfony/Bridge/Monolog/composer.json b/src/Symfony/Bridge/Monolog/composer.json index 558b990d1e..fa1c718c31 100644 --- a/src/Symfony/Bridge/Monolog/composer.json +++ b/src/Symfony/Bridge/Monolog/composer.json @@ -24,10 +24,5 @@ "psr-0": { "Symfony\\Bridge\\Monolog": "" } }, "target-dir": "Symfony/Bridge/Monolog", - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - } + "minimum-stability": "dev" } diff --git a/src/Symfony/Bridge/Propel1/composer.json b/src/Symfony/Bridge/Propel1/composer.json index 678e78be31..696174ab26 100644 --- a/src/Symfony/Bridge/Propel1/composer.json +++ b/src/Symfony/Bridge/Propel1/composer.json @@ -26,10 +26,5 @@ "psr-0": { "Symfony\\Bridge\\Propel1": "" } }, "target-dir": "Symfony/Bridge/Propel1", - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - } + "minimum-stability": "dev" } diff --git a/src/Symfony/Bridge/Swiftmailer/composer.json b/src/Symfony/Bridge/Swiftmailer/composer.json index b0c5e134af..194e72621a 100644 --- a/src/Symfony/Bridge/Swiftmailer/composer.json +++ b/src/Symfony/Bridge/Swiftmailer/composer.json @@ -26,10 +26,5 @@ "psr-0": { "Symfony\\Bridge\\Swiftmailer": "" } }, "target-dir": "Symfony/Bridge/Swiftmailer", - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - } + "minimum-stability": "dev" } diff --git a/src/Symfony/Bridge/Twig/composer.json b/src/Symfony/Bridge/Twig/composer.json index 8d2f0eaab4..04942e2f06 100644 --- a/src/Symfony/Bridge/Twig/composer.json +++ b/src/Symfony/Bridge/Twig/composer.json @@ -39,10 +39,5 @@ "psr-0": { "Symfony\\Bridge\\Twig": "" } }, "target-dir": "Symfony/Bridge/Twig", - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - } + "minimum-stability": "dev" } diff --git a/src/Symfony/Bundle/FrameworkBundle/composer.json b/src/Symfony/Bundle/FrameworkBundle/composer.json index d45f4d286d..75faafe3a0 100644 --- a/src/Symfony/Bundle/FrameworkBundle/composer.json +++ b/src/Symfony/Bundle/FrameworkBundle/composer.json @@ -40,10 +40,5 @@ "psr-0": { "Symfony\\Bundle\\FrameworkBundle": "" } }, "target-dir": "Symfony/Bundle/FrameworkBundle", - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - } + "minimum-stability": "dev" } diff --git a/src/Symfony/Bundle/SecurityBundle/composer.json b/src/Symfony/Bundle/SecurityBundle/composer.json index 68d60fcec4..80e7c8d50d 100644 --- a/src/Symfony/Bundle/SecurityBundle/composer.json +++ b/src/Symfony/Bundle/SecurityBundle/composer.json @@ -23,10 +23,5 @@ "psr-0": { "Symfony\\Bundle\\SecurityBundle": "" } }, "target-dir": "Symfony/Bundle/SecurityBundle", - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - } + "minimum-stability": "dev" } diff --git a/src/Symfony/Bundle/TwigBundle/composer.json b/src/Symfony/Bundle/TwigBundle/composer.json index 530fd774cc..d72ea9b0b7 100644 --- a/src/Symfony/Bundle/TwigBundle/composer.json +++ b/src/Symfony/Bundle/TwigBundle/composer.json @@ -23,10 +23,5 @@ "psr-0": { "Symfony\\Bundle\\TwigBundle": "" } }, "target-dir": "Symfony/Bundle/TwigBundle", - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - } + "minimum-stability": "dev" } diff --git a/src/Symfony/Bundle/WebProfilerBundle/composer.json b/src/Symfony/Bundle/WebProfilerBundle/composer.json index b2eabd3987..8f62eeee54 100644 --- a/src/Symfony/Bundle/WebProfilerBundle/composer.json +++ b/src/Symfony/Bundle/WebProfilerBundle/composer.json @@ -23,10 +23,5 @@ "psr-0": { "Symfony\\Bundle\\WebProfilerBundle": "" } }, "target-dir": "Symfony/Bundle/WebProfilerBundle", - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - } + "minimum-stability": "dev" } diff --git a/src/Symfony/Component/BrowserKit/composer.json b/src/Symfony/Component/BrowserKit/composer.json index 73ad7b58ec..30ce92fa29 100644 --- a/src/Symfony/Component/BrowserKit/composer.json +++ b/src/Symfony/Component/BrowserKit/composer.json @@ -30,10 +30,5 @@ "psr-0": { "Symfony\\Component\\BrowserKit": "" } }, "target-dir": "Symfony/Component/BrowserKit", - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - } + "minimum-stability": "dev" } diff --git a/src/Symfony/Component/ClassLoader/composer.json b/src/Symfony/Component/ClassLoader/composer.json index ccd9ba9bc7..b8fa026092 100644 --- a/src/Symfony/Component/ClassLoader/composer.json +++ b/src/Symfony/Component/ClassLoader/composer.json @@ -26,10 +26,5 @@ "psr-0": { "Symfony\\Component\\ClassLoader": "" } }, "target-dir": "Symfony/Component/ClassLoader", - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - } + "minimum-stability": "dev" } diff --git a/src/Symfony/Component/Config/composer.json b/src/Symfony/Component/Config/composer.json index 7d809454ab..f76ca99ff7 100644 --- a/src/Symfony/Component/Config/composer.json +++ b/src/Symfony/Component/Config/composer.json @@ -22,10 +22,5 @@ "psr-0": { "Symfony\\Component\\Config": "" } }, "target-dir": "Symfony/Component/Config", - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - } + "minimum-stability": "dev" } diff --git a/src/Symfony/Component/Console/composer.json b/src/Symfony/Component/Console/composer.json index 4488bf6092..415ee7fe71 100644 --- a/src/Symfony/Component/Console/composer.json +++ b/src/Symfony/Component/Console/composer.json @@ -22,10 +22,5 @@ "psr-0": { "Symfony\\Component\\Console": "" } }, "target-dir": "Symfony/Component/Console", - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - } + "minimum-stability": "dev" } diff --git a/src/Symfony/Component/CssSelector/composer.json b/src/Symfony/Component/CssSelector/composer.json index 285fade6f3..b2982ae7c7 100644 --- a/src/Symfony/Component/CssSelector/composer.json +++ b/src/Symfony/Component/CssSelector/composer.json @@ -22,10 +22,5 @@ "psr-0": { "Symfony\\Component\\CssSelector": "" } }, "target-dir": "Symfony/Component/CssSelector", - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - } + "minimum-stability": "dev" } diff --git a/src/Symfony/Component/DependencyInjection/composer.json b/src/Symfony/Component/DependencyInjection/composer.json index de7ad5dd19..26e7606a6b 100644 --- a/src/Symfony/Component/DependencyInjection/composer.json +++ b/src/Symfony/Component/DependencyInjection/composer.json @@ -30,10 +30,5 @@ "psr-0": { "Symfony\\Component\\DependencyInjection": "" } }, "target-dir": "Symfony/Component/DependencyInjection", - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - } + "minimum-stability": "dev" } diff --git a/src/Symfony/Component/DomCrawler/composer.json b/src/Symfony/Component/DomCrawler/composer.json index 1cf401ffbd..693be84f79 100644 --- a/src/Symfony/Component/DomCrawler/composer.json +++ b/src/Symfony/Component/DomCrawler/composer.json @@ -28,10 +28,5 @@ "psr-0": { "Symfony\\Component\\DomCrawler": "" } }, "target-dir": "Symfony/Component/DomCrawler", - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - } + "minimum-stability": "dev" } diff --git a/src/Symfony/Component/EventDispatcher/composer.json b/src/Symfony/Component/EventDispatcher/composer.json index 159a920ab8..2b89a2865f 100644 --- a/src/Symfony/Component/EventDispatcher/composer.json +++ b/src/Symfony/Component/EventDispatcher/composer.json @@ -29,10 +29,5 @@ "psr-0": { "Symfony\\Component\\EventDispatcher": "" } }, "target-dir": "Symfony/Component/EventDispatcher", - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - } + "minimum-stability": "dev" } diff --git a/src/Symfony/Component/Filesystem/composer.json b/src/Symfony/Component/Filesystem/composer.json index 82325ce29c..3ed97f1669 100644 --- a/src/Symfony/Component/Filesystem/composer.json +++ b/src/Symfony/Component/Filesystem/composer.json @@ -22,10 +22,5 @@ "psr-0": { "Symfony\\Component\\Filesystem": "" } }, "target-dir": "Symfony/Component/Filesystem", - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - } + "minimum-stability": "dev" } diff --git a/src/Symfony/Component/Finder/composer.json b/src/Symfony/Component/Finder/composer.json index aeac80eaf5..0de630922b 100644 --- a/src/Symfony/Component/Finder/composer.json +++ b/src/Symfony/Component/Finder/composer.json @@ -22,10 +22,5 @@ "psr-0": { "Symfony\\Component\\Finder": "" } }, "target-dir": "Symfony/Component/Finder", - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - } + "minimum-stability": "dev" } diff --git a/src/Symfony/Component/Form/composer.json b/src/Symfony/Component/Form/composer.json index 1cc51ef63b..83f69cda74 100644 --- a/src/Symfony/Component/Form/composer.json +++ b/src/Symfony/Component/Form/composer.json @@ -33,10 +33,5 @@ "psr-0": { "Symfony\\Component\\Form": "" } }, "target-dir": "Symfony/Component/Form", - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - } + "minimum-stability": "dev" } diff --git a/src/Symfony/Component/HttpFoundation/composer.json b/src/Symfony/Component/HttpFoundation/composer.json index 91c23c2487..e9f54948b6 100644 --- a/src/Symfony/Component/HttpFoundation/composer.json +++ b/src/Symfony/Component/HttpFoundation/composer.json @@ -25,10 +25,5 @@ } }, "target-dir": "Symfony/Component/HttpFoundation", - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - } + "minimum-stability": "dev" } diff --git a/src/Symfony/Component/HttpKernel/composer.json b/src/Symfony/Component/HttpKernel/composer.json index 9071a373da..f61d92493f 100644 --- a/src/Symfony/Component/HttpKernel/composer.json +++ b/src/Symfony/Component/HttpKernel/composer.json @@ -42,10 +42,5 @@ "psr-0": { "Symfony\\Component\\HttpKernel": "" } }, "target-dir": "Symfony/Component/HttpKernel", - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - } + "minimum-stability": "dev" } diff --git a/src/Symfony/Component/Locale/composer.json b/src/Symfony/Component/Locale/composer.json index ff051d6561..b6a6e70567 100644 --- a/src/Symfony/Component/Locale/composer.json +++ b/src/Symfony/Component/Locale/composer.json @@ -25,10 +25,5 @@ "psr-0": { "Symfony\\Component\\Locale": "" } }, "target-dir": "Symfony/Component/Locale", - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - } + "minimum-stability": "dev" } diff --git a/src/Symfony/Component/OptionsResolver/composer.json b/src/Symfony/Component/OptionsResolver/composer.json index 22a39a23e2..a43d9ac041 100644 --- a/src/Symfony/Component/OptionsResolver/composer.json +++ b/src/Symfony/Component/OptionsResolver/composer.json @@ -22,10 +22,5 @@ "psr-0": { "Symfony\\Component\\OptionsResolver": "" } }, "target-dir": "Symfony/Component/OptionsResolver", - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - } + "minimum-stability": "dev" } diff --git a/src/Symfony/Component/Process/composer.json b/src/Symfony/Component/Process/composer.json index a9f85f1af8..a20a4517bd 100644 --- a/src/Symfony/Component/Process/composer.json +++ b/src/Symfony/Component/Process/composer.json @@ -22,10 +22,5 @@ "psr-0": { "Symfony\\Component\\Process": "" } }, "target-dir": "Symfony/Component/Process", - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - } + "minimum-stability": "dev" } diff --git a/src/Symfony/Component/Routing/composer.json b/src/Symfony/Component/Routing/composer.json index ae2e764b1e..70f46dac93 100644 --- a/src/Symfony/Component/Routing/composer.json +++ b/src/Symfony/Component/Routing/composer.json @@ -33,10 +33,5 @@ "psr-0": { "Symfony\\Component\\Routing": "" } }, "target-dir": "Symfony/Component/Routing", - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - } + "minimum-stability": "dev" } diff --git a/src/Symfony/Component/Security/composer.json b/src/Symfony/Component/Security/composer.json index 0cf0a30337..3240140c17 100644 --- a/src/Symfony/Component/Security/composer.json +++ b/src/Symfony/Component/Security/composer.json @@ -40,10 +40,5 @@ "psr-0": { "Symfony\\Component\\Security": "" } }, "target-dir": "Symfony/Component/Security", - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - } + "minimum-stability": "dev" } diff --git a/src/Symfony/Component/Serializer/composer.json b/src/Symfony/Component/Serializer/composer.json index 1c8feb3050..68c4623fcf 100644 --- a/src/Symfony/Component/Serializer/composer.json +++ b/src/Symfony/Component/Serializer/composer.json @@ -22,10 +22,5 @@ "psr-0": { "Symfony\\Component\\Serializer": "" } }, "target-dir": "Symfony/Component/Serializer", - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - } + "minimum-stability": "dev" } diff --git a/src/Symfony/Component/Templating/composer.json b/src/Symfony/Component/Templating/composer.json index 43b701b824..9b1b46e719 100644 --- a/src/Symfony/Component/Templating/composer.json +++ b/src/Symfony/Component/Templating/composer.json @@ -22,10 +22,5 @@ "psr-0": { "Symfony\\Component\\Templating": "" } }, "target-dir": "Symfony/Component/Templating", - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - } + "minimum-stability": "dev" } diff --git a/src/Symfony/Component/Translation/composer.json b/src/Symfony/Component/Translation/composer.json index e65d5c779f..04d2e60f0e 100644 --- a/src/Symfony/Component/Translation/composer.json +++ b/src/Symfony/Component/Translation/composer.json @@ -30,10 +30,5 @@ "psr-0": { "Symfony\\Component\\Translation": "" } }, "target-dir": "Symfony/Component/Translation", - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - } + "minimum-stability": "dev" } diff --git a/src/Symfony/Component/Validator/composer.json b/src/Symfony/Component/Validator/composer.json index 7dcb5a7ef8..0f4a3ae94f 100644 --- a/src/Symfony/Component/Validator/composer.json +++ b/src/Symfony/Component/Validator/composer.json @@ -32,10 +32,5 @@ "psr-0": { "Symfony\\Component\\Validator": "" } }, "target-dir": "Symfony/Component/Validator", - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - } + "minimum-stability": "dev" } diff --git a/src/Symfony/Component/Yaml/composer.json b/src/Symfony/Component/Yaml/composer.json index 88460ce34b..dfabb51881 100644 --- a/src/Symfony/Component/Yaml/composer.json +++ b/src/Symfony/Component/Yaml/composer.json @@ -22,10 +22,5 @@ "psr-0": { "Symfony\\Component\\Yaml": "" } }, "target-dir": "Symfony/Component/Yaml", - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - } + "minimum-stability": "dev" } From 99321cbe247266fc44da648b69e2c515853c60e6 Mon Sep 17 00:00:00 2001 From: Bernhard Schussek Date: Thu, 6 Dec 2012 11:23:39 +0100 Subject: [PATCH 2/6] [DoctrineBridge] Fixed: Exception is thrown if the entity class is not known to Doctrine --- .../Bridge/Doctrine/Form/Type/DoctrineType.php | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Bridge/Doctrine/Form/Type/DoctrineType.php b/src/Symfony/Bridge/Doctrine/Form/Type/DoctrineType.php index 14d88e3403..5ac205a1d7 100644 --- a/src/Symfony/Bridge/Doctrine/Form/Type/DoctrineType.php +++ b/src/Symfony/Bridge/Doctrine/Form/Type/DoctrineType.php @@ -12,6 +12,7 @@ namespace Symfony\Bridge\Doctrine\Form\Type; use Doctrine\Common\Persistence\ManagerRegistry; +use Symfony\Component\Form\Exception\FormException; use Doctrine\Common\Persistence\ObjectManager; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Bridge\Doctrine\Form\ChoiceList\EntityChoiceList; @@ -130,7 +131,17 @@ abstract class DoctrineType extends AbstractType return $registry->getManager($em); } - return $registry->getManagerForClass($options['class']); + $em = $registry->getManagerForClass($options['class']); + + if (null === $em) { + throw new FormException(sprintf( + 'Class "%s" seems not to be a managed Doctrine entity. ' . + 'Did you forget to map it?', + $options['class'] + )); + } + + return $em; }; $resolver->setDefaults(array( From db2ee54bdad6103359bfd8a00cde28abe3d3332f Mon Sep 17 00:00:00 2001 From: Bernhard Schussek Date: Thu, 6 Dec 2012 11:27:06 +0100 Subject: [PATCH 3/6] [DoctrineBridge] Improved exception message --- .../Bridge/Doctrine/Form/ChoiceList/EntityChoiceList.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Bridge/Doctrine/Form/ChoiceList/EntityChoiceList.php b/src/Symfony/Bridge/Doctrine/Form/ChoiceList/EntityChoiceList.php index 78594ed8ba..2e385a343f 100644 --- a/src/Symfony/Bridge/Doctrine/Form/ChoiceList/EntityChoiceList.php +++ b/src/Symfony/Bridge/Doctrine/Form/ChoiceList/EntityChoiceList.php @@ -392,7 +392,10 @@ class EntityChoiceList extends ObjectChoiceList private function getIdentifierValues($entity) { if (!$this->em->contains($entity)) { - throw new FormException('Entities passed to the choice field must be managed'); + throw new FormException( + 'Entities passed to the choice field must be managed. Maybe ' . + 'persist them in the entity manager?' + ); } $this->em->initializeObject($entity); From b604eb7b52d3c7ed8828b7fe10f3e172d1451a16 Mon Sep 17 00:00:00 2001 From: Bernhard Schussek Date: Thu, 6 Dec 2012 13:32:30 +0100 Subject: [PATCH 4/6] [DoctrineBridge] Improved performance of the EntityType when used with the "query_builder" option --- src/Symfony/Bridge/Doctrine/CHANGELOG.md | 5 +++ .../Bridge/Doctrine/Form/Type/EntityType.php | 45 +++++++++++++++---- .../Form/Type/EntityTypePerformanceTest.php | 21 +++++++++ 3 files changed, 62 insertions(+), 9 deletions(-) diff --git a/src/Symfony/Bridge/Doctrine/CHANGELOG.md b/src/Symfony/Bridge/Doctrine/CHANGELOG.md index 6369ea3634..8e3f148448 100644 --- a/src/Symfony/Bridge/Doctrine/CHANGELOG.md +++ b/src/Symfony/Bridge/Doctrine/CHANGELOG.md @@ -1,6 +1,11 @@ CHANGELOG ========= +2.1.5 +----- + + * fixed caching of choice lists when EntityType is used with the "query_builder" option + 2.1.0 ----- diff --git a/src/Symfony/Bridge/Doctrine/Form/Type/EntityType.php b/src/Symfony/Bridge/Doctrine/Form/Type/EntityType.php index 51b47be4dc..c9ffb95e9b 100644 --- a/src/Symfony/Bridge/Doctrine/Form/Type/EntityType.php +++ b/src/Symfony/Bridge/Doctrine/Form/Type/EntityType.php @@ -11,26 +11,53 @@ namespace Symfony\Bridge\Doctrine\Form\Type; -use Doctrine\Common\Persistence\ObjectManager; +use Symfony\Component\Form\Exception\UnexpectedTypeException; use Symfony\Bridge\Doctrine\Form\ChoiceList\ORMQueryBuilderLoader; +use Doctrine\Common\Persistence\ObjectManager; +use Doctrine\ORM\QueryBuilder; class EntityType extends DoctrineType { + /** + * @var array + */ + private $loaderCache = array(); + /** * Return the default loader object. * - * @param ObjectManager $manager - * @param mixed $queryBuilder - * @param string $class + * @param ObjectManager $manager + * @param QueryBuilder|\Closure $queryBuilder + * @param string $class + * * @return ORMQueryBuilderLoader + * + * @throws UnexpectedTypeException If the passed $queryBuilder is no \Closure + * and no QueryBuilder or if the closure + * does not return a QueryBuilder. */ public function getLoader(ObjectManager $manager, $queryBuilder, $class) { - return new ORMQueryBuilderLoader( - $queryBuilder, - $manager, - $class - ); + if ($queryBuilder instanceof \Closure) { + $queryBuilder = $queryBuilder($manager->getRepository($class)); + + if (!$queryBuilder instanceof QueryBuilder) { + throw new UnexpectedTypeException($queryBuilder, 'Doctrine\ORM\QueryBuilder'); + } + } elseif (!$queryBuilder instanceof QueryBuilder) { + throw new UnexpectedTypeException($queryBuilder, 'Doctrine\ORM\QueryBuilder or \Closure'); + } + + // It is important to return the same loader for identical queries, + // otherwise the caching mechanism in DoctrineType does not work + // (which expects identical loaders for the cache to work) + $hash = md5($queryBuilder->getQuery()->getDQL()); + + if (!isset($this->loaderCache[$hash])) { + $this->loaderCache[$hash] = new ORMQueryBuilderLoader($queryBuilder); + } + + return $this->loaderCache[$hash]; } public function getName() diff --git a/src/Symfony/Bridge/Doctrine/Tests/Form/Type/EntityTypePerformanceTest.php b/src/Symfony/Bridge/Doctrine/Tests/Form/Type/EntityTypePerformanceTest.php index ea068c24f3..e73dd11be0 100644 --- a/src/Symfony/Bridge/Doctrine/Tests/Form/Type/EntityTypePerformanceTest.php +++ b/src/Symfony/Bridge/Doctrine/Tests/Form/Type/EntityTypePerformanceTest.php @@ -12,6 +12,7 @@ namespace Symfony\Bridge\Doctrine\Tests\Form\Type; use Symfony\Component\Form\Tests\FormPerformanceTestCase; +use Doctrine\ORM\EntityRepository; use Symfony\Bridge\Doctrine\Tests\Fixtures\SingleIdentEntity; use Doctrine\ORM\Tools\SchemaTool; use Symfony\Bridge\Doctrine\Tests\DoctrineOrmTestCase; @@ -36,6 +37,9 @@ class EntityTypePerformanceTest extends FormPerformanceTestCase $manager->expects($this->any()) ->method('getManager') ->will($this->returnValue($this->em)); + $manager->expects($this->any()) + ->method('getManagerForClass') + ->will($this->returnValue($this->em)); return array( new CoreExtension(), @@ -109,4 +113,21 @@ class EntityTypePerformanceTest extends FormPerformanceTestCase $form->createView(); } } + + public function testCollapsedEntityFieldWithQueryBuilder() + { + $this->setMaxRunningTime(1); + + for ($i = 0; $i < 20; ++$i) { + $form = $this->factory->create('entity', null, array( + 'class' => self::ENTITY_CLASS, + 'query_builder' => function (EntityRepository $repo) { + return $repo->createQueryBuilder('e')->addOrderBy('e.id', 'DESC'); + } + )); + + // force loading of the choice list + $form->createView(); + } + } } From 048979993e94f74946fc7ed6b7ac612db2c0a01e Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Thu, 6 Dec 2012 13:50:59 +0100 Subject: [PATCH 5/6] [HttpFoundation] added a check for the host header value --- .../Component/HttpFoundation/Request.php | 24 ++++++++++++------- .../Component/HttpFoundation/RequestTest.php | 14 ++++++++--- 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/src/Symfony/Component/HttpFoundation/Request.php b/src/Symfony/Component/HttpFoundation/Request.php index 03c7e03a5f..f9c9673b8c 100644 --- a/src/Symfony/Component/HttpFoundation/Request.php +++ b/src/Symfony/Component/HttpFoundation/Request.php @@ -696,6 +696,8 @@ class Request * * @return string * + * @throws \UnexpectedValueException when the host name is invalid + * * @api */ public function getHost() @@ -703,19 +705,23 @@ class Request if (self::$trustProxy && $host = $this->headers->get('X_FORWARDED_HOST')) { $elements = explode(',', $host); - $host = trim($elements[count($elements) - 1]); - } else { - if (!$host = $this->headers->get('HOST')) { - if (!$host = $this->server->get('SERVER_NAME')) { - $host = $this->server->get('SERVER_ADDR', ''); - } + $host = $elements[count($elements) - 1]; + } elseif (!$host = $this->headers->get('HOST')) { + if (!$host = $this->server->get('SERVER_NAME')) { + $host = $this->server->get('SERVER_ADDR', ''); } } - // Remove port number from host - $host = preg_replace('/:\d+$/', '', $host); + // Trim and remove port number from host + $host = trim(preg_replace('/:\d+$/', '', $host)); - return trim($host); + // as the host can come from the user (HTTP_HOST and depending on the configuration, SERVER_NAME too can come from the user) + // check that it does not contain forbidden characters (see RFC 952 and RFC 2181) + if ($host && !preg_match('/^\[?(?:[a-zA-Z0-9-:\]_]+\.?)+$/', $host)) { + throw new \UnexpectedValueException('Invalid Host'); + } + + return $host; } /** diff --git a/tests/Symfony/Tests/Component/HttpFoundation/RequestTest.php b/tests/Symfony/Tests/Component/HttpFoundation/RequestTest.php index 43e083aadd..d006a4a811 100644 --- a/tests/Symfony/Tests/Component/HttpFoundation/RequestTest.php +++ b/tests/Symfony/Tests/Component/HttpFoundation/RequestTest.php @@ -417,9 +417,6 @@ class RequestTest extends \PHPUnit_Framework_TestCase $this->assertEquals('foo=1&foo=2', $request->getQueryString(), '->getQueryString() allows repeated parameters'); } - /** - * @covers Symfony\Component\HttpFoundation\Request::getHost - */ public function testGetHost() { $request = new Request(); @@ -458,6 +455,17 @@ class RequestTest extends \PHPUnit_Framework_TestCase $request->initialize(array(), array(), array(), array(), array(), array('SERVER_NAME' => 'www.exemple.com', 'HTTP_HOST' => 'www.host.com')); $this->assertEquals('www.host.com', $request->getHost(), '->getHost() value from Host header has priority over SERVER_NAME '); + + } + + /** + * @expectedException RuntimeException + */ + public function testGetHostWithFakeHttpHostValue() + { + $request = new Request(); + $request->initialize(array(), array(), array(), array(), array(), array('HTTP_HOST' => 'www.host.com?query=string')); + $request->getHost(); } /** From 447ff915df4dc896bb5e2f7dc069c9516ffe92d6 Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Fri, 7 Dec 2012 10:25:02 +0100 Subject: [PATCH 6/6] [HttpFoundation] changed UploadedFile::move() to use move_uploaded_file() when possible (closes #5878, closes #6185) --- .../Component/HttpFoundation/File/File.php | 23 ++++++++++++------- .../HttpFoundation/File/UploadedFile.php | 17 ++++++++++++-- 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/src/Symfony/Component/HttpFoundation/File/File.php b/src/Symfony/Component/HttpFoundation/File/File.php index 43b8c0d265..de4fb9d17b 100644 --- a/src/Symfony/Component/HttpFoundation/File/File.php +++ b/src/Symfony/Component/HttpFoundation/File/File.php @@ -523,6 +523,20 @@ class File extends \SplFileInfo * @api */ public function move($directory, $name = null) + { + $target = $this->getTargetFile($directory, $name); + + if (!@rename($this->getPathname(), $target)) { + $error = error_get_last(); + throw new FileException(sprintf('Could not move the file "%s" to "%s" (%s)', $this->getPathname(), $target, strip_tags($error['message']))); + } + + @chmod($target, 0666 & ~umask()); + + return $target; + } + + protected function getTargetFile($directory, $name = null) { if (!is_dir($directory)) { if (false === @mkdir($directory, 0777, true)) { @@ -534,14 +548,7 @@ class File extends \SplFileInfo $target = $directory.DIRECTORY_SEPARATOR.(null === $name ? $this->getBasename() : $this->getName($name)); - if (!@rename($this->getPathname(), $target)) { - $error = error_get_last(); - throw new FileException(sprintf('Could not move the file "%s" to "%s" (%s)', $this->getPathname(), $target, strip_tags($error['message']))); - } - - chmod($target, 0666); - - return new File($target); + return new File($target, false); } /** diff --git a/src/Symfony/Component/HttpFoundation/File/UploadedFile.php b/src/Symfony/Component/HttpFoundation/File/UploadedFile.php index 7b337da9ff..0830a8a06c 100644 --- a/src/Symfony/Component/HttpFoundation/File/UploadedFile.php +++ b/src/Symfony/Component/HttpFoundation/File/UploadedFile.php @@ -189,8 +189,21 @@ class UploadedFile extends File */ public function move($directory, $name = null) { - if ($this->isValid() && ($this->test || is_uploaded_file($this->getPathname()))) { - return parent::move($directory, $name); + if ($this->isValid()) { + if ($this->test) { + return parent::move($directory, $name); + } elseif (is_uploaded_file($this->getPathname())) { + $target = $this->getTargetFile($directory, $name); + + if (!@move_uploaded_file($this->getPathname(), $target)) { + $error = error_get_last(); + throw new FileException(sprintf('Could not move the file "%s" to "%s" (%s)', $this->getPathname(), $target, strip_tags($error['message']))); + } + + @chmod($target, 0666 & ~umask()); + + return $target; + } } throw new FileException(sprintf('The file "%s" has not been uploaded via Http', $this->getPathname()));