tag if no empty value
- * 958ec09: NativeSessionStorage regenerate
- * 0d6af5c: Use setTimeZone if this method exists.
- * 42019f6: [Console] Fixed argument parsing when a single dash is passed.
- * 097b376: [WebProfilerBundle] fixed toolbar for IE8 (refs #8380)
- * 4f5b8f0: [HttpFoundation] tried to keep the original Request URI as much as possible to avoid different behavior between ::createFromGlobals() and ::create()
- * 4c1dbc7: [TwigBridge] fixed form rendering when used in a template with dynamic inheritance
- * 8444339: [HttpKernel] added a check for private event listeners/subscribers
- * 427ee19: [FrameworkBundle] fixed registration of the register listener pass
- * ce7de37: [DependencyInjection] fixed a non-detected circular reference in PhpDumper (closes #8425)
- * 37102dc: [Process] Close unix pipes before calling `proc_close` to avoid a deadlock
- * 8c2a733: [HttpFoundation] fixed format duplication in Request
- * 1e75cf9: [Process] Fix #8970 : read output once the process is finished, enable pipe tests on Windows
- * 9542d72: [Form] Fixed expanded choice field to be marked invalid when unknown choices are submitted
- * 72b8807: [Form] Fixed ChoiceList::get*By*() methods to preserve order and array keys
- * b65a515: [Form] Fixed FormValidator::findClickedButton() not to be called exponentially
- * 49f5027: [HttpKernel] fixer HInclude src (closes #8951)
- * c567262: Fixed escaping of service identifiers in configuration
- * 4a76c76: [Process][2.2] Fix Process component on windows
- * 65814ba: Request->getPort() should prefer HTTP_HOST over SERVER_PORT
- * e75d284: Fixing broken http auth digest in some circumstances (php-fpm + apache).
- * 970405f: fixed some circular references
- * 899f176: [Security] fixed a leak in ExceptionListener
- * 2fd8a7a: [Security] fixed a leak in the ContextListener
- * 6362fa4: Button missing getErrorsAsString() fixes #8084 Debug: Not calling undefined method anymore. If the form contained a submit button the call would fail and the debug of the form wasn't possible. Now it will work in all cases. This fixes #8084
- * e4b3039: Use isset() instead of array_key_exists() in DIC
- * 2d34e78: [BrowserKit] fixed method/files/content when redirecting a request
- * 64e1655: [BrowserKit] removed some headers when redirecting a request
- * 96a4b00: [BrowserKit] fixed headers when redirecting if history is set to false (refs #8697)
- * c931eb7: [HttpKernel] fixed route parameters storage in the Request data collector (closes #8867)
- * 96bb731: optimized circular reference checker
- * 39b610d: Clear lazy loading initializer after the service is successfully initialized
- * 91234cd: [HttpKernel] changed fragment URLs to be relative by default (closes #8458)
- * 4922a80: [FrameworkBundle] added support for double-quoted strings in the extractor (closes #8797)
- * 52d8676: [Intl] made RegionBundle and LanguageBundle merge fallback data when using a country-specific locale
- * 0d07af8: [BrowserKit] Pass headers when `followRedirect()` is called
- * d400b5a: Return BC compatibility for `@Route` parameters and default values
-
-* 2.3.4 (2013-08-27)
-
- * f936b41: clearToken exception is thrown at wrong place.
- * ea480bd: [Form] Fixed Form::all() signature for PHP 5.3.3
- * e1f40f2: [Locale] Fixed: Locale::setDefault() throws no exception when "en" is passed
- * d0faf55: [Locale] Fixed: StubLocale::setDefault() throws no exception when "en" is passed
- * 566d79c: [Yaml] fixed embedded folded string parsing
- * 33b0a17: [Validator] fixed Boolean handling in XML constraint mappings (closes #5603)
- * 0951b8d: [Translation] Fixed regression: When only one rule is passed to transChoice(), this rule should be used
- * 4563f1b: [Yaml] Fix comment containing a colon on a scalar line being parsed as a hash.
- * 7e87eb1: fixed request format when forwarding a request
- * 07d14e5: [Form] Removed exception in Button::setData(): setData() is now always called for all elements in the form tree during the initialization of the tree
- * ccaaedf: [Form] PropertyPathMapper::mapDataToForms() *always* calls setData() on every child to ensure that all *_DATA events were fired when the initialization phase is over (except for virtual forms)
- * 00bc270: [Form] Fixed: submit() reacts to dynamic modifications of the form children
- * c4636e1: added a functional test for locale handling in sub-requests
- * 05fdb12: Fixed issue #6932 - Inconsistent locale handling in subrequests
- * b3c3159: fixed locale of sub-requests when explicitely set by the developer (refs #8821)
- * 9bb7a3d: fixed request format of sub-requests when explicitely set by the developer (closes #8787)
- * fa35597: Sets _format attribute only if it wasn't set previously by the user.
- * f946108: fixed the format of the request used to render an exception
- * 51022c3: Fix typo in the check_path validator
- * 5f7219e: added a missing use statement (closes #8808)
- * 262879d: fix for Process:isSuccessful()
- * 0723c10: [Process] Use a consistent way to reset data of the process latest run
- * 85a9c9d: [HttpFoundation] Fixed removing a nonexisting namespaced attribute.
- * 191d320: [Validation] Fixed IdentityTranslator to pass correct Locale to MessageSelector
- * c6ecd83: SwiftMailerHandler in Monolog bridge now able to react to kernel.terminate event
- * 99adcf1: {HttpFoundation] [Session] fixed session compatibility with memcached/redis session storage
- * ab9a96b: Fixes for hasParameterOption and getParameterOption methods of ArgvInput
- * dbd0855: Added sleep() workaround for windows php rename bug
- * c342715: [Form] Fixed: Added "validation_groups" option to submit button
- * fa01e6b: [Process] Fix for #8754 (Timed-out processes are successful)
- * 909fab6: [Process] Fix #8742 : Signal-terminated processes are not successful
- * fa769a2: [Process] Add more precision to Process::stop timeout
- * 3ef517b: [Process] Fix #8739
- * 572ba68: [TwigBridge] removed superflous ; when rendering form_enctype() (closes #8660)
- * 18896d5a: [Validator] fixed the wrong isAbstract() check against the class (fixed #8589)
- * e8e76ec: [TwigBridge] Prevent code extension to display warning
- * 96aec0f: Fix internal sub-request creation
- * 6ed0fdf: [Form] Moved auto_initialize option to the BaseType
- * e47657d: Make sure ContextErrorException is loaded during compile time errors
- * 98f6969: Fix empty process argument escaping on Windows
- * 1a73b44: added missing support for the new output API in PHP 5.4+
- * e0c7d3d: Fixed bug introduced in #8675
- * 0b965fb: made the filesystem loader compatible with Twig 2.0
- * 8fa0453: [Intl] Updated stubs to reflect ICU 51.2
- * 322f880: replaced deprecated Twig features
- * 48338fc: Ignore null value in comparison validators
-
-* 2.3.3 (2013-08-07)
-
- * c35cc5b: added trusted hosts check
- * 6d555bc: Fixed metadata serialization
- * cd51d82: [Form] fixed wrong call to setTimeZone() (closes #8644)
- * 5c359a8: Fix issue with \DateTimeZone::UTC / 'UTC' for PHP 5.4
- * 85330a6: [Form] Fixed patched forms to be valid even if children are not submitted
- * cb5e765: [Form] Fixed: If a form is not present in a request, it is not automatically submitted
- * 97cbb19: [Form] Removed the "disabled" attribute from the placeholder option in select fields due to problems with the BlackBerry 10 browser
- * c138304: [routing] added ability for apache matcher to handle array values
- * 1bd45b3: [FrameworkBundle] fixed regression where the command might have the wrong container if the application is reused several times
- * b41cf82: [Validator] fixed StaticMethodLoader trying to invoke methods of abstract classes (closes #8589)
- * e5fba3c: [Form] fixes empty file-inputs get treated as extra field
- * 3553c71: return 0 if there is no valid data
- * 50d0727: [DependencyInjection] fixed regression where setting a service to null did not trigger a re-creation of the service when getting it
- * dc1fff0: The ignoreAttributes itself should be ignored, too.
- * ae7fa11: [Twig] fixed TwigEngine::exists() method when a template contains a syntax error (closes #8546)
- * 28e0709: [Validator] fixed ConstraintViolation:: incorrect when nested
- * 890934d: handle Optional and Required constraints from XML or YAML sources correctly
- * a2eca45: Fixed #8455: PhpExecutableFinder::find() does not always return the correct binary
- * 485d53a: [DependencyInjection] Fix Container::camelize to convert beginning and ending chars
- * 2317443: [Security] fixed issue where authentication listeners clear unrelated tokens
- * 2ebb783: fix issue #8499 modelChoiceList call getPrimaryKey on a non object
- * 242b318: [DependencyInjection] Add exception for service name not dumpable in PHP
- * d3eb9b7: [Validator] Fixed groups argument misplace for validateValue method from validator class
-
-* 2.3.2 (2013-07-17)
-
- * bb59f40: Reverts JSON_NUMERIC_CHECK
- * 9c5f8c6: [Yaml] removed wrong comment removal inside a string block
- * 2dc1ee0: [HtppKernel] fixed inline fragment renderer
- * 06b69b8: fixed inline fragment renderer
- * 91bb757: ProgressHelper shows percentage complete.
- * 9d1004b: fix handling of a default 'template' as a string
- * 82dbaee: [HttpKernel] fixed the inline renderer when passing objects as attributes (closes #7124)
- * 8bb4e4d: [DI] Fixed bug requesting non existing service from dumped frozen container
- * 6dbd1e1: [WebProfiler] fix content-type parameter
- * a830001: Passed the config when building the Configuration in ConfigurableExtension
- * c875d0a: [Form] fixed INF usage which does not work on Solaris (closes #8246)
- * ab1439e: [Console] Fixed the table rendering with multi-byte strings.
- * c0da3ae: [Process] Disable exception on stream_select timeout
- * 77f2aa8: [HttpFoundation] fixed issue with session_regenerate_id (closes #7380)
- * bcbbb28: Throw exception if value is passed to VALUE_NONE input, long syntax
- * 6b71513: fixed date type format pattern regex
- * b5ded81: [Security] fixed usage of the salt for the bcrypt encoder (refs #8210)
- * 842f3fa: do not re-register commands each time a Console\Application is run
- * 0991cd0: [Process] moved env check to the Process class (refs #8227)
- * 8764944: fix issue where $_ENV contains array vals
- * 4139936: [DomCrawler] Fix handling file:// without a host
- * e65723c: fix-progressbar-start
- * aa79393: also consider alias in Container::has()
- * de289d2: [Form] corrected interface bind() method defined against in deprecation notice
- * 0c0a3e9: [Console] fixed regression when calling a command foo:bar if there is another one like foo:bar:baz (closes #8245)
- * 849f3ed: [Finder] Fix SplFileInfo::getContents isn't working with ssh2 protocol
- * 6d2135b: force the Content-Type to html in the web profiler controllers
-
-* 2.3.1 (2013-06-11)
-
- * 25e3abd: fix many-to-many Propel1 ModelChoiceList
- * bce6bd2: [DomCrawler] Fixed a fatal error when setting a value in a malformed field name.
- * e3561ce: [FrameworkBundle] Fixed OutOfBoundException when session handler_id is null
- * 81b122d: [DependencyInjection] Add support for aliases of aliases + regression test
- * 445b2e3: [Console] fix status code when Exception::getCode returns something like 0.1
- * bbfde62: Fixed exit code for exceptions with error code 0
- * d8c0ef7: [DependencyInjection] Rename ContainerBuilder::$aliases to avoid conflicting with the parent class
- * bb797ee: [DependencyInjection] Remove get*Alias*Service methods from compiled containers
- * 379f5e0: [DependencyInjection] Fix aliased access of shared services, fixes #8096
- * afad9c7: instantiate valid commands only
-
-* 2.3.0 (2013-06-03)
-
- * e93fc7a: [FrameworkBundle] set the dispatcher in the console application
- * 2038329: [Form] [Validator] Fixed post_max_size = 0 bug (Issue #8065)
- * 554ab9f: [Console] renamed ConsoleForExceptionEvent into ConsoleExceptionEvent
- * fd151fd: [Security] Fixed the check if an interface exists.
- * c8e5503: [FrameworkBundle] removed HttpFoundation classes from HttpKernel cache
- * 169c0b9: [Finder] Fix iteration fails with non-rewindable streams
- * 45b68e0: [Finder] Fix unexpected duplicate sub path related AppendIterator issue
- * 13ba4ea: fix logger in regards to DebugLoggerInterface
- * 97b38ed: Added type of return value in VoterInterface.
- * 79a842a: [Console] Add namespace support back in to list command
- * 5321600: Fixed two bugs in HttpCache
- * 435012f: [Config] Adding the previous exception message into the FileLoaderLoadException so it's more easily seen
- * 5c317b7: [Console] fix and refactor exit code handling
- * 1469953: [CssSelector] Fix :nth-last-child() translation
- * 2d9027d: [CssSelector] Fix :nth-last-child() translation
- * 91b8490: Fix Crawler::children() to not trigger a notice for childless node
-
-* 2.3.0-RC1 (2013-05-16)
-
- * 95f356b: remove check for PHP bug #50731
- * 8f54da7: [BrowserKit] should not follow redirects if status code is not 30x
- * f41ac06: changed all version deps to accepts all upcoming Symfony versions
- * a4e3ebf: [DomCrawler] Fixed the Crawler::html() method for PHP versions earlier than 5.3.6.
- * 3beaf52: [Security] Disabled the BCryptPasswordEncoder tests for PHP versions lower than 5.3.7.
-
-* 2.3.0-BETA2 (2013-05-10)
-
- * 97bee20: Pass exceptions from the ExceptionListener to Monolog
- * be42dbc: [HttpFoundation][File][UploadedFile] Fix guessClientExtension() method
- * a5441b2: Fixed parsing of leading blank lines in folded scalars. Closes #7989.
- * e8d5d16: Fixed Loader import
- * bd0c48c: [Console] moved the IO configuration to its own method
- * fdb4b1f: [Console] moved --help support to allow proper behavior with other passed options
- * dd0e138: Eased translationNodeVisitor overriding in TranslationExtension
- * 853f681: fixed request scope issues (refs #7457)
- * 60edc58: Fixed fatal error in normalize/denormalizeObject.
- * 78e3710: ProxyManager Bridge
- * 41805c0: [Crawler] Add proper validation of node argument of method add
- * 7933971: [Form] Added radio button for empty value to expanded single-choice fields
- * 0586c7e: made some optimization when parsing YAML files
- * 1856df3: [Security] fixed wrong merge (refs #4776)
- * 5b7e1e6: added a missing check for the provider key
- * f1c2ab7: [DependencyInjection] Add a method map to avoid computing method names from service names
- * ea633f5: [HttpKernel] Avoid updating the context if the request did not change
- * 997d549: [HttpFoundation] Avoid a few unnecessary str_replace() calls
- * f5e7f24: [HttpFoundation] Optimize ServerBag::getHeaders()
- * 59b78c7: [Validator] Fixed: $traverse and $deep is passed to the visitor from Validator::validate()
- * bcb5400: [Form] Fixed transform()/reverseTransform() to always throw TransformationFailedExceptions
- * 7b2ebbf: [Form] Fixed: String validation groups are never interpreted as callbacks
- * 0610750: if the repository method returns an array ensure that it's internal poin...
- * dcced01: [Form] Improved multi-byte handling of NumberToLocalizedStringTransformer
- * 90a20d7: [Translation] Made translation domain defaults in Translator consistent with TranslatorInterface
- * 549a308: [Form] Fixed CSRF error messages to be translated and added "csrf_message" option
diff --git a/CHANGELOG-2.4.md b/CHANGELOG-2.4.md
deleted file mode 100644
index f1bbdc685396e..0000000000000
--- a/CHANGELOG-2.4.md
+++ /dev/null
@@ -1,401 +0,0 @@
-CHANGELOG for 2.4.x
-===================
-
-This changelog references the relevant changes (bug and security fixes) done
-in 2.4 minor versions.
-
-To get the diff for a specific change, go to https://github.com/symfony/symfony/commit/XXX where XXX is the change hash
-To get the diff between two versions, go to https://github.com/symfony/symfony/compare/v2.4.0...v2.4.1
-
-* 2.4.9 (2014-09-03)
-
- * security #11832 CVE-2014-6072 (fabpot)
- * security #11831 CVE-2014-5245 (stof)
- * security #11830 CVE-2014-4931 (aitboudad, Jérémy Derussé)
- * security #11829 CVE-2014-6061 (damz, fabpot)
- * security #11828 CVE-2014-5244 (nicolas-grekas, larowlan)
- * bug #10197 [FrameworkBundle] PhpExtractor bugfix and improvements (mtibben)
- * bug #11772 [Filesystem] Add FTP stream wrapper context option to enable overwrite (Damian Sromek)
- * bug #11788 [Yaml] fixed mapping keys containing a quoted # (hvt, fabpot)
- * bug #11160 [DoctrineBridge] Abstract Doctrine Subscribers with tags (merk)
- * bug #11768 [ClassLoader] Add a __call() method to XcacheClassLoader (tstoeckler)
- * bug #11726 [Filesystem Component] mkdir race condition fix #11626 (kcassam)
- * bug #11677 [YAML] resolve variables in inlined YAML (xabbuh)
- * bug #11639 [DependencyInjection] Fixed factory service not within the ServiceReferenceGraph. (boekkooi)
- * bug #11778 [Validator] Fixed wrong translations for Collection constraints (samicemalone)
- * bug #11756 [DependencyInjection] fix @return anno created by PhpDumper (jakubkulhan)
- * bug #11711 [DoctrineBridge] Fix empty parameter logging in the dbal logger (jakzal)
- * bug #11692 [DomCrawler] check for the correct field type (xabbuh)
- * bug #11672 [Routing] fix handling of nullable XML attributes (xabbuh)
- * bug #11624 [DomCrawler] fix the axes handling in a bc way (xabbuh)
- * bug #11676 [Form] Fixed #11675 ValueToDuplicatesTransformer accept "0" value (Nek-)
- * bug #11695 [Validators] Fixed failing tests requiring ICU 52.1 which are skipped otherwise (webmozart)
- * bug #11529 [WebProfilerBundle] Fixed double height of canvas (hason)
- * bug #11641 [WebProfilerBundle ] Fix toolbar vertical alignment (blaugueux)
- * bug #11559 [Validator] Convert objects to string in comparison validators (webmozart)
- * feature #11510 [HttpFoundation] MongoDbSessionHandler supports auto expiry via configurable expiry_field (catchamonkey)
- * bug #11408 [HttpFoundation] Update QUERY_STRING when overrideGlobals (yguedidi)
- * bug #11633 [FrameworkBundle] add missing attribute to XSD (xabbuh)
- * bug #11601 [Validator] Allow basic auth in url when using UrlValidator. (blaugueux)
- * bug #11609 [Console] fixed style creation when providing an unknown tag option (fabpot)
- * bug #10914 [HttpKernel] added an analyze of environment parameters for built-in server (mauchede)
- * bug #11598 [Finder] Shell escape and windows support (Gordon Franke, gimler)
- * bug #11499 [BrowserKit] Fixed relative redirects for ambiguous paths (pkruithof)
- * bug #11516 [BrowserKit] Fix browser kit redirect with ports (dakota)
- * bug #11545 [Bundle][FrameworkBundle] built-in server: exit when docroot does not exist (xabbuh)
- * bug #11560 Plural fix (1emming)
- * bug #11558 [DependencyInjection] Fixed missing 'factory-class' attribute in XmlDumper output (kerdany)
- * bug #11548 [Component][DomCrawler] fix axes handling in Crawler::filterXPath() (xabbuh)
- * bug #11422 [DependencyInjection] Self-referenced 'service_container' service breaks garbage collection (sun)
- * bug #11428 [Serializer] properly handle null data when denormalizing (xabbuh)
- * bug #10687 [Validator] Fixed string conversion in constraint violations (eagleoneraptor, webmozart)
- * bug #11475 [EventDispatcher] don't count empty listeners (xabbuh)
- * bug #11436 fix signal handling in wait() on calls to stop() (xabbuh, romainneutron)
- * bug #11469 [BrowserKit] Fixed server HTTP_HOST port uri conversion (bcremer, fabpot)
- * bug #11425 Fix issue described in #11421 (Ben, ben-rosio)
- * bug #11423 Pass a Scope instance instead of a scope name when cloning a container in the GrahpvizDumper (jakzal)
- * bug #11448 [MonologBridge] fixed Console handler priorities (fabpot)
- * bug #11120 [Process] Reduce I/O load on Windows platform (romainneutron)
- * bug #11342 [Form] Check if IntlDateFormatter constructor returned a valid object before using it (romainneutron)
- * bug #11439 [ExpressionLanguage] Fixed double quoted string literals containing sharps (pylebecq)
- * bug #11411 [Validator] Backported #11410 to 2.3: Object initializers are called only once per object (webmozart)
- * bug #11403 [Translator][FrameworkBundle] Added @ to the list of allowed chars in Translator (takeit)
- * bug #11381 [Process] Use correct test for empty string in UnixPipes (whs, romainneutron)
-
-* 2.4.8 (2014-07-15)
-
- * [Security] Forced validate of locales passed to the translator
- * bug #11278 Remove Spaceless Blocks From Twig Templates (chrisguitarguy)
- * feature #11367 [HttpFoundation] Fix to prevent magic bytes injection in JSONP responses... (CVE-2014-4671) (Andrew Moore)
- * bug #11386 Remove Spaceless Blocks from Twig Form Templates (chrisguitarguy)
- * bug #9719 [TwigBundle] fix configuration tree for paths (mdavis1982, cordoval)
- * bug #11244 [HttpFoundation] Remove body-related headers when sending the response, if body is empty (SimonSimCity)
-
-* 2.4.7 (2014-07-08)
-
- * bug #11283 [SecurityBundle] Remove Expression Language services when the component is unavailable (thewilkybarkid)
- * bug #11238 [Translation] Added unescaping of ids in PoFileLoader (JustBlackBird)
- * bug #11194 [DomCrawler] Remove the query string and the anchor of the uri of a link (benja-M-1)
- * bug #11272 [Console] Make sure formatter is the same. (akimsko)
- * bug #11259 [Config] Fixed failed config schema loads due to libxml_disable_entity_loader usage (ccorliss)
- * bug #11234 [ClassLoader] fixed PHP warning on PHP 5.3 (fabpot)
- * bug #11179 [Process] Fix ExecutableFinder with open basedir (cs278)
- * bug #11242 [CssSelector] Refactored the CssSelector to remove the circular object graph (stof)
- * bug #11219 [DomCrawler] properly handle buttons with single and double quotes insid... (xabbuh)
- * bug #11220 [Components][Serializer] optional constructor arguments can be omitted during the denormalization process (xabbuh)
- * bug #11186 Added missing `break` statement (apfelbox)
- * bug #11169 [Console] Fixed notice in DialogHelper (florianv)
- * bug #11144 [HttpFoundation] Fixed Request::getPort returns incorrect value under IPv6 (kicken)
- * bug #10966 PHP Fatal error when getContainer method of ContainerAwareCommand has be... (kevinvergauwen)
- * bug #10981 [HttpFoundation] Fixed isSecure() check to be compliant with the docs (Jannik Zschiesche)
- * bug #11092 [HttpFoundation] Fix basic authentication in url with PHP-FPM (Kdecherf)
- * bug #10808 [DomCrawler] Empty select with attribute name="foo[]" bug fix (darles)
- * bug #11063 [HttpFoundation] fix switch statement (Tobion)
- * bug #11009 [HttpFoundation] smaller fixes for PdoSessionHandler (Tobion)
- * bug #11041 Remove undefined variable $e (skydiablo)
-
-* 2.4.6 (2014-05-31)
-
- * bug #11014 [Validator] Remove property and method targets from the optional and required constraints (jakzal)
- * bug #10983 [DomCrawler] Fixed charset detection in html5 meta charset tag (77web)
- * Merge branch '2.3' into 2.4
- * bug #10979 Make rootPath part of regex greedy (artursvonda)
- * bug #10995 [TwigBridge][Trans]set %count% only on transChoice from the current context. (aitboudad)
- * bug #10987 [DomCrawler] Fixed a forgotten case of complex XPath queries (stof)
-
-* 2.4.5 (2014-05-22)
-
- * bug #10849 [WIP][Finder] Fix wrong implementation on sortable callback comparator (ProPheT777)
- * bug #10929 [Process] Add validation on Process input (romainneutron)
- * bug #10958 [DomCrawler] Fixed filterXPath() chaining loosing the parent DOM nodes (stof, robbertkl)
- * bug #10953 [HttpKernel] fixed file uploads in functional tests without file selected (realmfoo)
- * bug #10947 [PropertyAccess] Fixed getValue() when accessing non-existing indices of ArrayAccess implementations (webmozart)
- * bug #10937 [HttpKernel] Fix "absolute path" when we look to the cache directory (BenoitLeveque)
- * bug #10894 [HttpKernel] removed absolute paths from the generated container (fabpot)
- * bug #10926 [DomCrawler] Fixed the initial state for options without value attribute (stof)
- * bug #10925 [DomCrawler] Fixed the handling of boolean attributes in ChoiceFormField (stof)
- * bug #10777 [Form] Automatically add step attribute to HTML5 time widgets to display seconds if needed (tucksaun)
- * bug #10909 [PropertyAccess] Fixed plurals for -ves words (csarrazi)
- * bug #10904 [HttpKernel] Replace sha1 with sha256 in recently added tests (jakzal)
- * bug #10899 Explicitly define the encoding. (jakzal)
- * bug #10897 [Console] Fix a console test (jakzal)
- * bug #10896 [HttpKernel] Fixed cache behavior when TTL has expired and a default "global" TTL is defined (alquerci, fabpot)
- * bug #10841 [DomCrawler] Fixed image input case sensitive (geoffrey-brier)
- * bug #10714 [Console]Improve formatter for double-width character (denkiryokuhatsuden)
- * bug #10872 [Form] Fixed TrimListenerTest as of PHP 5.5 (webmozart)
- * bug #10762 [BrowserKit] Allow URLs that don't contain a path when creating a cookie from a string (thewilkybarkid)
- * bug #10863 [Security] Add check for supported attributes in AclVoter (artursvonda)
- * bug #10833 [TwigBridge][Transchoice] set %count% from the current context. (aitboudad)
- * bug #10820 [WebProfilerBundle] Fixed profiler seach/homepage with empty token (tucksaun)
- * bug #10815 Fixed issue #5427 (umpirsky)
- * bug #10817 [Debug] fix #10313: FlattenException not found (nicolas-grekas)
- * bug #10803 [Debug] fix ErrorHandlerTest when context is not an array (nicolas-grekas)
- * bug #10801 [Debug] ErrorHandler: remove $GLOBALS from context in PHP5.3 fix #10292 (nicolas-grekas)
- * bug #10797 [HttpFoundation] Allow File instance to be passed to BinaryFileResponse (anlutro)
- * bug #10643 [TwigBridge] Removed strict check when found variables inside a translation (goetas)
- * bug #10605 [ExpressionLanguage] Strict in_array check in Parser.php (parnas)
-
-* 2.4.4 (2014-04-27)
-
- * bug #10789 [Console] Fixed the rendering of exceptions on HHVM with a terminal width (stof)
- * bug #10773 [WebProfilerBundle ] Fixed an edge case on WDT loading (tucksaun)
- * bug #10784 [Security] removed $csrfTokenManager type hint from SimpleFormAuthenticationListener constructor argument (choonge)
- * bug #10763 [Process] Disable TTY mode on Windows platform (romainneutron)
- * bug #10772 [Finder] Fix ignoring of unreadable dirs in the RecursiveDirectoryIterator (jakzal)
- * bug #10757 [Process] Setting STDIN while running should not be possible (romainneutron)
- * bug #10749 Fixed incompatibility of x509 auth with nginx (alcaeus)
- * bug #10735 [Translation] [PluralizationRules] Little correction for case 'ar' (klyk50)
- * bug #10720 [HttpFoundation] Fix DbalSessionHandler (Tobion)
- * bug #10721 [HttpFoundation] status 201 is allowed to have a body (Tobion)
- * bug #10728 [Process] Fix #10681, process are failing on Windows Server 2003 (romainneutron)
- * bug #10733 [DomCrawler] Textarea value should default to empty string instead of null. (Berdir)
- * bug #10723 [Security] fix DBAL connection typehint (Tobion)
- * bug #10715 [Debug] Fixed ClassNotFoundFatalErrorHandler on windows. (lyrixx)
- * bug #10700 Fixes various inconsistencies in the code (fabpot)
- * bug #10697 [Translation] Make IcuDatFileLoader/IcuResFileLoader::load invalid resource compatible with HHVM. (idn2104)
- * bug #10652 [HttpFoundation] fix PDO session handler under high concurrency (Tobion)
- * bug #10690 [Validator] Fix hack for nested Collection/All losing context (GromNaN)
- * bug #10669 [Profiler] Prevent throwing fatal errors when searching timestamps or invalid dates (stloyd)
- * bug #10670 [Templating] PhpEngine should propagate charset to its helpers (stloyd)
- * bug #10665 [DependencyInjection] Fix ticket #10663 - Added setCharset method call to PHP templating engine (koku)
- * bug #10654 Changed the typehint of the EsiFragmentRenderer to the interface (stof)
- * bug #10649 [BrowserKit] Fix #10641 : BrowserKit is broken when using ip as host (romainneutron)
-
-* 2.4.3 (2014-04-04)
-
- * bug #10586 Fixes URL validator to accept single part urls (merk)
- * bug #10591 [Form] Buttons are now disabled if their containing form is disabled (webmozart)
- * bug #10587 [Process] Fix Process test suite (romainneutron)
- * bug #10579 HHVM fixes (fabpot)
- * bug #10564 fixed the profiler when an uncalled listener throws an exception when instantiated (fabpot)
- * bug #10568 [Form] Fixed hashing of choice lists containing non-UTF-8 characters (webmozart)
- * bug #10536 Avoid levenshtein comparison when using ContainerBuilder. (catch56)
- * bug #10549 Fixed server values in BrowserKit (fabpot)
- * bug #10540 [HttpKernel] made parsing controllers more robust (fabpot)
- * bug #10545 [DependencyInjection] Fixed YamlFileLoader imports path (jrnickell)
- * bug #10523 [Debug] Check headers sent before sending PHP response (GromNaN)
- * bug #10363 [FrameworkBundle][Console] Fix issue #10345 container:debug --parameter="" not working anymore (FineWolf)
- * bug #10275 [Validator] Fixed ACE domain checks on UrlValidator (#10031) (aeoris)
- * bug #10123 handle array root element (greg0ire)
- * bug #10532 Fixed regression when using Symfony on filesystems without chmod support (fabpot)
- * bug #10502 [HttpKernel] Fix #10437: Catch exceptions when reloading a no-cache request (romainneutron)
- * bug #10493 Fix libxml_use_internal_errors and libxml_disable_entity_loader usage (romainneutron)
- * bug #9784 [HttpFoundation] Removed ini check to make Uploadedfile work on Google App Engine (micheleorselli)
- * bug #10416 [Form] Allow options to be grouped by objects (felds)
- * bug #10410 [Form] Fix "Array was modified outside object" in ResizeFormListener. (Chekote)
- * bug #10494 [Validator] Minor fix in IBAN validator (sprain)
- * bug #10491 Fixed bug that incorrectly causes the "required" attribute to be omitted from select even though it contains the "multiple" attribute (fabpot)
- * bug #10479 [Process] Fix escaping on Windows (romainneutron)
- * bug #10480 [Process] Fixed fatal errors in getOutput and getErrorOutput when process was not started (romainneutron)
- * bug #10420 [Process] Make Process::start non-blocking on Windows platform (romainneutron)
- * bug #10455 [Process] Fix random failures in test suite on TravisCI (romainneutron)
- * bug #10448 [Process] Fix quoted arguments escaping (romainneutron)
- * bug #10444 [DomCrawler] Fixed incorrect value name conversion in getPhpValues() and getPhpFiles() (romainneutron)
- * bug #10423 [Config] XmlUtils::convertDomElementToArray does not handle '0' (bendavies)
- * bug #10153 [Process] Fixed data in pipe being truncated if not read before process termination (astephens25)
- * bug #10429 [Process] Fix #9160 : escaping an argument with a trailing backslash on windows fails (romainneutron)
- * bug #10412 [Process] Fix process status in TTY mode (romainneutron)
- * bug #10382 10158 get vary multiple (bbinkovitz)
- * bug #10251 [Form] Fixes empty file-inputs getting treated as extra field. (jenkoian)
- * bug #10284 [HttpKernel] Fix issue #10209 (stephpy)
- * bug #10351 [HttpKernel] fix stripComments() normalizing new-lines (sstok)
- * bug #10348 Update FileLoader to fix issue #10339 (msumme)
- * bug #10306 [Serializer] Throw exception when unable to normalize embedded object (gquemener)
- * bug #10338 [ExpressionLanguage] Fixed evaluation of short circuit operators (florianv)
- * bug #10146 [WebProfilerBundle] fixed parsing Mongo DSN and added Test for it (malarzm)
- * bug #10299 [Finder] () is also a valid delimiter (WouterJ)
- * bug #10255 [FrameworkBundle] Fixed wrong redirect url if path contains some query parameters (pulzarraider)
- * bug #10285 Bypass sigchild detection if phpinfo is not available (Seldaek)
- * bug #10269 [Form] Revert "Fix "Array was modified outside object" in ResizeFormListener." (norzechowicz)
- * bug #10231 [Console] removed problematic regex (fabpot)
- * bug #10245 [DomCrawler] Added support for tags to be treated as links (shamess)
- * bug #10232 [Form] Fix "Array was modified outside object" in ResizeFormListener. (Chekote)
-
-* 2.4.2 (2014-02-12)
-
- * bug #10215 [Routing] reduced recursion in dumper (arnaud-lb)
- * bug #10207 [DomCrawler] Fixed filterXPath() chaining (robbertkl)
- * bug #10205 [DomCrawler] Fixed incorrect handling of image inputs (robbertkl)
- * bug #10191 [HttpKernel] fixed wrong reference in TraceableEventDispatcher (fabpot)
- * bug #10195 [Debug] Fixed recursion level incrementing in FlattenException::flattenArgs(). (sun)
- * bug #10151 [Form] Update DateTime objects only if the actual value has changed (peterrehm)
- * bug #10140 allow the TextAreaFormField to be used with valid/invalid HTML (dawehner)
- * bug #10131 added lines to exceptions for the trans and transchoice tags (fabpot)
- * bug #10002 Routing condition bugfix (marco-jantke)
- * bug #10119 [Validator] Minor fix in XmlFileLoader (florianv)
- * bug #10078 [BrowserKit] add non-standard port to HTTP_HOST server param (kbond)
- * bug #10095 [Security] fix DI for SimpleFormAuthenticationListener (Tobion)
- * bug #10091 [Translation] Update PluralizationRules.php (guilhermeblanco)
- * bug #10053 [Form] fixed allow render 0 numeric input value (dczech)
- * bug #10067 [HttpKernel] allow null value in fragment handler (kbond)
- * bug #10042 [Expression Language] fix foo[index] (schokocappucino)
- * bug #10033 [HttpKernel] Bugfix - Logger Deprecation Notice (Rican7)
- * bug #10023 [FrameworkBundle] Thrown an HttpException instead returning a Response in RedirectController::redirectAction() (jakzal)
- * bug #9985 Prevent WDT from creating a session (mvrhov)
- * bug #10010 [Twig Bridge] Fixed bug in ExpressionExtension (ricbra)
- * bug #10000 [Console] Fixed the compatibility with HHVM (stof)
- * bug #9979 [Doctrine Bridge][Validator] Fix for null values in assosiated properties when using UniqueEntityValidator (vpetrovych)
- * bug #9983 [TwigBridge] Update min. version of Twig (stloyd)
- * bug #9970 [CssSelector] fixed numeric attribute issue (jfsimon)
- * bug #9747 [DoctrineBridge] Fix: Add type detection. Needed by pdo_dblib (iamluc)
- * bug #9962 [Process] Fix #9861 : Revert TTY mode (romainneutron)
- * bug #9960 [Form] Update minimal requirement in composer.json (stloyd)
- * bug #9952 [Translator] Fix Empty translations with Qt files (vlefort)
- * bug #9957 [Console] Fixed command name guessing if an alternative is an alias (jakzal)
- * bug #9948 [WebProfilerBundle] Fixed profiler toolbar icons for XHTML. (rafalwrzeszcz)
- * bug #9933 Propel1 exception message (jaugustin)
- * bug #9949 [BrowserKit] Throw exception on invalid cookie expiration timestamp (anlutro)
-
-* 2.4.1 (2014-01-05)
-
- * bug #9938 [Process] Add support SAPI cli-server (peter-gribanov)
- * bug #9940 [EventDispatcher] Fix hardcoded listenerTag name in error message (lemoinem)
- * bug #9923 [DoctrineBridge] Fixed an issue with DoctrineParserCache (florianv)
- * bug #9908 [HttpFoundation] Throw proper exception when invalid data is passed to JsonResponse class (stloyd)
- * bug #9902 [Security] fixed pre/post authentication checks (fabpot)
- * bug #9910 fixed missing use statements (fabpot)
- * bug #9895 [Intl] Added round support for ROUND_CEILING, ROUND_FLOOR, ROUND_DOWN, ROUND_UP (pamil)
- * bug #9899 [Filesystem | WCM] 9339 fix stat on url for filesystem copy (cordoval)
- * bug #9589 [DependencyInjection] Fixed #9020 - Added support for collections in service#parameters (lavoiesl)
- * bug #9889 [Console] fixed column width when using the Table helper with some decoration in cells (fabpot)
- * bug #9323 [DomCrawler]fix #9321 Crawler::addHtmlContent add gbk encoding support (bronze1man)
- * bug #8997 [Security] Fixed problem with losing ROLE_PREVIOUS_ADMIN role. (pawaclawczyk)
- * bug #9557 [DoctrineBridge] Fix for cache-key conflict when having a \Traversable as choices (DRvanR)
- * bug #9879 [Security] Fix ExceptionListener to catch correctly AccessDeniedException if is not first exception (fabpot)
- * bug #9885 [Dependencyinjection] Fixed handling of inlined references in the AnalyzeServiceReferencesPass (fabpot)
- * bug #9884 [DomCrawler] Fixed creating form objects from named form nodes (jakzal)
- * bug #9882 Add support for HHVM in the getting of the PHP executable (fabpot)
- * bug #9850 [Validator] Fixed IBAN validator with 0750447346 value (stewe)
- * bug #9865 [Validator] Fixes message value for objects (jongotlin)
- * bug #9441 [Form][DateTimeToArrayTransformer] Check for hour, minute & second validity (egeloen)
- * bug #9720 [FrameworkBundle] avoid tables to have apparently long blank line breaks and be too far appart for long nested array params (cordoval)
- * bug #9867 #9866 [Filesystem] Fixed mirror for symlinks (COil)
- * bug #9806 [Security] Fix parent serialization of user object (ddeboer)
- * bug #9834 [DependencyInjection] Fixed support for backslashes in service ids. (jakzal)
- * bug #9826 fix #9356 [Security] Logger should manipulate the user reloaded from provider (matthieuauger)
- * feature #9775 [FrameworkBundle] Added extra details in XMLDescriptor to improve container description (Exelenz)
- * bug #9771 Crawler default namespace fix (crudecki)
- * bug #9769 [BrowserKit] fixes #8311 CookieJar is totally ignorant of RFC 6265 edge cases (jzawadzki)
- * bug #9697 [Config] fix 5528 let ArrayNode::normalizeValue respect order of value array provided (cordoval)
- * bug #9701 [Config] fix #7243 allow 0 as arraynode name (cordoval)
- * bug #9795 [Form] Fixed issue in BaseDateTimeTransformer when invalid timezone cause Trans... (tyomo4ka)
- * bug #9714 [HttpFoundation] BinaryFileResponse should also return 416 or 200 on some range-requets (SimonSimCity)
- * bug #9601 [Routing] Remove usage of deprecated _scheme requirement (Danez)
- * bug #9489 [DependencyInjection] Add normalization to tag options (WouterJ)
- * bug #9135 [Form] [Validator] fix maxLength guesser (franek)
- * bug #9790 [Filesystem] Changed the mode for a target file in copy() to be write only (jakzal)
- * bug #9758 [Console] fixed TableHelper when cell value has new line (k-przybyszewski)
- * bug #9760 [Routing] Fix router matching pattern against multiple hosts (karolsojko)
- * bug #9768 [FrameworkBundle] Fixed bug in XMLDescriptor (Exelenz)
- * bug #9700 [ExpressionLanguage] throw exception when parameters contain expressions (aitboudad)
- * bug #9674 [Form] rename validators.ua.xlf to validators.uk.xlf (craue)
- * bug #9722 [Validator]Fixed getting wrong msg when value is an object in Exception (aitboudad)
- * bug #9750 allow TraceableEventDispatcher to reuse event instance in nested events (evillemez)
- * bug #9718 [validator] throw an exception if isn't an instance of ConstraintValidatorInterface. (aitboudad)
- * bug #9716 Reset the box model to content-box in the web debug toolbar (stof)
- * bug #9711 [FrameworkBundle] Allowed "0" as a checkbox value in php templates (jakzal)
-
-* 2.4.0 (2013-12-03)
-
- * bug #9673 Fixed BC break in csrf protection (WouterJ)
- * bug #9665 [Bridge/Doctrine] ORMQueryBuilderLoader - handled the scenario when no entity manager is passed with closure query builder (jakzal)
- * bug #9662 [FrameworkBundle] Enabled csrf_protection by default if form.csrf_protection is enabled (bschussek)
- * bug #9656 [DoctrineBridge] normalized class names in the ORM type guesser (fabpot)
- * bug #9647 use the correct class name to retrieve mapped class' metadata and reposi... (xabbuh)
- * bug #9648 [Debug] ensured that a fatal PHP error is actually fatal after being handled by our error handler (fabpot)
- * bug #9643 [WebProfilerBundle] Fixed js escaping in time.html.twig (hason)
- * bug #9641 [Debug] Avoid notice from being "eaten" by fatal error. (fabpot)
- * bug #9639 Modified guessDefaultEscapingStrategy to not escape txt templates (fabpot)
- * bug #9314 [Form] Fix DateType for 32bits computers. (WedgeSama)
- * bug #9443 [FrameworkBundle] Fixed the registration of validation.xml file when the form is disabled (hason)
- * bug #9625 [HttpFoundation] Do not return an empty session id if the session was closed (Taluu)
- * bug #9621 [ExpressionLanguage] fixed lexing expression ending with spaces (fabpot)
- * bug #9637 [Validator] Replaced inexistent interface (jakzal)
- * bug #9628 [HttpKernel] Fix profiler event-listener usage outside request stack context (romainneutron)
- * bug #9624 [Console] Fix undefined offset when formatting namespace suggestions (GromNaN)
- * bug #9605 Adjusting CacheClear Warmup method to namespaced kernels (rdohms)
- * bug #9617 [HttpKernel] Http kernel regression fix (hhamon)
- * bug #9610 Container::camelize also takes backslashes into consideration (ondrejmirtes)
-
-* 2.4.0-RC1 (2013-11-25)
-
- * bug #9607 [HttpKernel] Fix a bug when using the kernel property in overridden method Client::setServerParameters() (gnutix)
- * bug #9597 [Security] Typos in Security's ExpressionLanguage (ovrflo)
- * feature #9587 [SecurityBundle] Added csrf_token_generator and csrf_token_id as new (shieldo)
- * feature #9578 [DomCrawler] Fixes `attr` method returning empty string for missing attributes (aik099)
- * bug #9565 [Debug] Fixed ClassNotFoundFatalErrorHandler which could cause a fatal error (jakzal)
- * bug #9525 Cache Warmup Breaks Namespaced Kernel (rdohms)
- * bug #9447 [BrowserKit] fixed protocol-relative url redirection (jong99)
- * bug #9535 No Entity Manager defined exception (armetiz)
- * bug #9485 [Acl] Fix for issue #9433 (guilro)
- * bug #9516 [AclProvider] Fix incorrect behavior when partial results returned from cache (superdav42)
- * feature #9546 [FrameworkBundle] use the new request_stack service in the GlobalVariables object (hhamon)
- * bug #9566 [Console] Revert BC-break for verbose option value (chEbba)
- * bug #9553 [FrameworkBundle] use the new request_stack service to get the Request object in the base Controller class (hhamon)
- * feature #9541 [Translation] make IdentityTranslater consistent with normal translator (Tobion)
- * bug #9536 [FrameworkBundle] Update 2 dependencies (currently broken) (asm89)
- * bug #9352 [Intl] make currency bundle merge fallback locales when accessing data, ... (shieldo)
- * bug #9537 [FrameworkBundle] Fix mistake in translation's service definition. (phpmike)
- * bug #9529 [ExpressionLanguage] Fixed conflict between punctation and range (WouterJ)
- * bug #9367 [Process] Check if the pipe array is empty before calling stream_select() (jfposton)
- * bug #9211 [Form] Fixed memory leak in FormValidator (bschussek)
- * bug #9469 [Propel1] re-factor Propel1 ModelChoiceList (havvg)
- * bug #9499 Request::overrideGlobals() may call invalid ini value (denkiryokuhatsuden)
- * feature #9494 made Router implement RequestMatcherInterface (fabpot)
- * bug #9420 [Console][ProgressHelper] Fix ProgressHelper redraw when redrawFreq is greater than 1 (giosh94mhz)
- * bug #9212 [Validator] Force Luhn Validator to only work with strings (Richtermeister)
- * bug #9476 Fixed bug with lazy services (peterrehm)
- * bug #9461 set mergeFallback to true, (ychadwick)
- * bug #9451 Fix bug with variable named context to securityContext (mieszko4)
- * feature #9434 moved logic for the session listeners into the HttpKernel component (fabpot)
- * bug #9431 [DependencyInjection] fixed YamlDumper did not make services private. (realityking)
- * bug #9332 [Config] Quoting reserved characters (WouterJ)
- * bug #9416 fixed issue with clone now the children of the original form are preserved and the clone form is given new children (yjv)
- * bug #9423 [Form] fix CsrfProviderAdapter (Tobion)
- * feature #9342 Add X-Debug-Url profiler url header (adrienbrault)
- * bug #9412 [HttpFoundation] added content length header to BinaryFileResponse (kbond)
-
-* 2.4.0-BETA2 (2013-10-30)
-
- * bug #9408 [Form] Fixed failing FormDataExtractorTest (bschussek)
- * bug #9397 [BUG][Form] Fix nonexistent key id in twig of data collector (francoispluchino)
- * bug #9395 [HttpKernel] fixed memory limit display in MemoryDataCollector (hhamon)
- * bug #9168 [FrameworkBundle] made sure that the debug event dispatcher is used everywhere (fabpot)
- * bug #9388 [Form] Fixed: The "data" option is taken into account even if it is NULL (bschussek)
- * bug #9394 [Form] Fixed form debugger to work even when no view variables are logged (bschussek)
- * bug #9391 [Serializer] Fixed the error handling when decoding invalid XML to avoid a Warning (stof)
- * feature #9365 prevent PHP from magically setting a 302 header (lsmith77)
- * feature #9252 [FrameworkBundle] Only enable CSRF protection when enabled in config (asm89)
- * bug #9378 [DomCrawler] [HttpFoundation] Make `Content-Type` attributes identification case-insensitive (matthieuprat)
- * bug #9354 [Process] Fix #9343 : revert file handle usage on Windows platform (romainneutron)
- * bug #9335 [Form] Improved FormTypeCsrfExtension to use the type class as default intention if the form name is empty (bschussek)
- * bug #9334 [Form] Improved FormTypeCsrfExtension to use the type class as default intention if the form name is empty (bschussek)
- * bug #9333 [Form] Improved FormTypeCsrfExtension to use the type class as default intention if the form name is empty (bschussek)
- * bug #9338 [DoctrineBridge] Added type check to prevent calling clear() on arrays (bschussek)
- * bug #9330 [Config] Fixed namespace when dumping reference (WouterJ)
- * bug #9329 [Form] Changed FormTypeCsrfExtension to use the form's name as default token ID (bschussek)
- * bug #9328 [Form] Changed FormTypeCsrfExtension to use the form's name as default intention (bschussek)
- * bug #9327 [Form] Changed FormTypeCsrfExtension to use the form's name as default intention (bschussek)
- * bug #9316 [WebProfilerBundle] Fixed invalid condition in form panel (bschussek)
- * bug #9308 [DoctrineBridge] Loosened CollectionToArrayTransformer::transform() to accept arrays (bschussek)
- * bug #9297 [Form] Add missing use in form renderer (egeloen)
- * bug #9309 [Routing] Fixed unresolved class (francoispluchino)
- * bug #9274 [Yaml] Fixed the escaping of strings starting with a dash when dumping (stof)
- * bug #9270 [Templating] Fix in ChainLoader.php (janschoenherr)
- * bug #9246 [Session] fixed wrong started state (tecbot)
- * bug #9234 [Debug] Fixed `ClassNotFoundFatalErrorHandler` (tPl0ch)
- * bug #9259 [Process] Fix latest merge from 2.2 in 2.3 (romainneutron)
- * bug #9237 [FrameworkBundle] assets:install command should mirror .dotfiles (.htaccess) (FineWolf)
- * bug #9223 [Translator] PoFileDumper - PO headers (Padam87)
- * bug #9257 [Process] Fix 9182 : random failure on pipes tests (romainneutron)
- * bug #9236 [Form] fix missing use statement for exception UnexpectedTypeException (jaugustin)
- * bug #9222 [Bridge] [Propel1] Fixed guessed relations (ClementGautier)
- * bug #9214 [FramworkBundle] Check event listener services are not abstract (lyrixx)
- * bug #9207 [HttpKernel] Check for lock existence before unlinking (ollietb)
- * bug #9184 Fixed cache warmup of paths which contain back-slashes (fabpot)
- * bug #9192 [Form] remove MinCount and MaxCount constraints in ValidatorTypeGuesser (franek)
-
-* 2.4.0-BETA1 (2013-10-07)
-
- * first beta release
-
diff --git a/CHANGELOG-2.5.md b/CHANGELOG-2.5.md
deleted file mode 100644
index 3d1f6dc0d7e65..0000000000000
--- a/CHANGELOG-2.5.md
+++ /dev/null
@@ -1,362 +0,0 @@
-CHANGELOG for 2.5.x
-===================
-
-This changelog references the relevant changes (bug and security fixes) done
-in 2.5 minor versions.
-
-To get the diff for a specific change, go to https://github.com/symfony/symfony/commit/XXX where XXX is the change hash
-To get the diff between two versions, go to https://github.com/symfony/symfony/compare/v2.5.0...v2.5.1
-
-* 2.5.10 (2015-02-02)
-
- * bug #13528 [Validator] reject ill-formed strings (nicolas-grekas)
- * bug #13525 [Validator] UniqueEntityValidator - invalidValue fixed. (Dawid Sajdak)
- * bug #13549 [EventDispatcher] Wrong EventDispatcher instance injected in listeners (dosten)
- * bug #13527 [Validator] drop grapheme_strlen in LengthValidator (nicolas-grekas)
- * bug #13376 [FrameworkBundle][config] allow multiple fallback locales. (aitboudad)
- * bug #12972 Make the container considered non-fresh if the environment parameters are changed (thewilkybarkid)
- * bug #13309 [Console] fixed 10531 (nacmartin)
- * bug #13352 [Yaml] fixed parse shortcut Key after unindented collection. (aitboudad)
- * bug #13343 [FrameworkBundle] FormDataCollector should be loaded only if form config is enabled (hason)
- * bug #13039 [HttpFoundation] [Request] fix baseUrl parsing to fix wrong path_info (rk3rn3r)
- * bug #13250 [Twig][Bridge][TranslationDefaultDomain] add support of named arguments. (aitboudad)
- * bug #13332 [Console] ArgvInput and empty tokens (Taluu)
- * bug #13293 [EventDispatcher] Add missing checks to RegisterListenersPass (znerol)
- * bug #13262 [Yaml] Improve YAML boolean escaping (petert82, larowlan)
- * bug #13420 [Debug] fix loading order for legacy classes (nicolas-grekas)
- * bug #13421 [FrameworkBundle] fix routing descriptor for options (Tobion)
- * bug #13405 [TwigBridge] exit when Twig environment is not set in the LintCommand (xabbuh)
- * bug #13371 fix missing comma in YamlDumper (garak)
- * bug #13365 [HttpFoundation] Make use of isEmpty() method (xelaris)
- * bug #13355 [Console] Helper\Table->addRow optimization (boekkooi)
- * bug #13347 [Console] Helper\TableHelper->addRow optimization (boekkooi)
- * bug #13346 [PropertyAccessor] Allow null value for a array (2.3) (boekkooi)
- * bug #13170 [Form] Set a child type to text if added to the form without a type. (jakzal)
- * bug #13334 [Yaml] Fixed #10597: Improved Yaml directive parsing (VictoriaQ)
- * bug #13316 [Form] fixed the CSRF extension to allow using only the new interfaces (fabpot)
- * bug #13305 [FrameworkBundle] fixed missing information in some descriptors (fabpot)
-
-* 2.5.9 (2015-01-07)
-
- * bug #13286 [Security] Don't destroy the session on buggy php releases. (derrabus)
- * bug #12417 [HttpFoundation] Fix an issue caused by php's Bug #66606. (wusuopu)
- * bug #13200 Don't add Accept-Range header on unsafe HTTP requests (jaytaph)
- * bug #12491 [Security] Don't send remember cookie for sub request (blanchonvincent)
- * bug #12574 [HttpKernel] Fix UriSigner::check when _hash is not at the end of the uri (nyroDev)
- * bug #13185 Fixes Issue #13184 - incremental output getters now return empty strings (Bailey Parker)
- * bug #13173 [Debug] fixes ClassNotFoundFatalErrorHandler to correctly handle class not found errors with Symfony ClassLoader component autoloaders. (hhamon)
- * bug #13145 [DomCrawler] Fix behaviour with tag (dkop, WouterJ)
- * bug #13027 fix #10054 - form data collector with dynamic fields (zulus)
- * bug #13141 [TwigBundle] Moved the setting of the default escaping strategy from the Twig engine to the Twig environment (fabpot)
- * bug #13114 [HttpFoundation] fixed error when an IP in the X-Forwarded-For HTTP head... (fabpot)
- * bug #12572 [HttpFoundation] fix checkip6 (Neime)
- * bug #13093 [TwigBundle] added missing absolute URL in Twig exceptions (fabpot)
- * bug #12975 [FrameworkBundle] Allow custom services for validator mapping cache. (jakzal)
- * bug #13075 [Config] fix error handler restoration in test (nicolas-grekas)
- * bug #13085 [FrameworkBundle] Fix dependency on ExtensionInterface over implementation (xphere)
- * bug #13081 [FrameworkBundle] forward error reporting level to insulated Client (nicolas-grekas)
- * bug #13053 [FrameworkBundle] Fixed Translation loader and update translation command. (saro0h)
- * bug #13048 [Security] Delete old session on auth strategy migrate (xelaris)
- * bug #12999 [FrameworkBundle] fix cache:clear command (nicolas-grekas)
- * bug #13004 add a limit and a test to FlattenExceptionTest. (Daniel Wehner)
- * bug #12961 fix session restart on PHP 5.3 (Tobion)
- * bug #12548 [Form] fixed a maxlength overring on a guessing (origaminal)
- * bug #12761 [Filesystem] symlink use RealPath instead LinkTarget (aitboudad)
- * bug #12848 [EventDispatcher] Fixed #12845 adding a listener to an event that is currently being dispatched (Pieter Jordaan)
- * bug #12855 [DependencyInjection] Perf php dumper (nicolas-grekas)
- * bug #12894 [FrameworkBundle][Template name] avoid error message for the shortcut n... (aitboudad)
- * bug #12806 [Console] Removed the use of $this->getHelperSet() as it is null by default (saro0h)
- * bug #12858 [ClassLoader] Fix undefined index in ClassCollectionLoader (szicsu)
-
-* 2.5.8 (2014-12-03)
-
- * bug #12811 Configure firewall's kernel exception listener with configured entry point or a default entry point (rjkip)
- * bug #12784 [DependencyInjection] make paths relative to __DIR__ in the generated container (nicolas-grekas)
- * bug #12716 [ClassLoader] define constant only if it wasn't defined before (xabbuh)
- * bug #12553 [Debug] fix error message on double exception (nicolas-grekas)
- * bug #12550 [FrameworkBundle] backport #12489 (xabbuh)
- * bug #12570 Fix initialized() with aliased services (Daniel Wehner)
- * bug #12267 [Form][WebProfiler] Empty form names fix (kix)
- * bug #12137 [FrameworkBundle] cache:clear command fills *.php.meta files with wrong data (Strate)
-
-* 2.5.7 (2014-11-20)
-
- * bug #12525 [Bundle][FrameworkBundle] be smarter when guessing the document root (xabbuh)
- * bug #12296 [SecurityBundle] Authentication entry point is only registered with firewall exception listener, not with authentication listeners (rjkip)
- * bug #12489 [FrameworkBundle] Fix server run in case the router script does not exist (romainneutron)
- * bug #12443 [HttpKernel] Adding support for invokable controllers in the RequestDataCollector (jameshalsall)
- * bug #12393 [DependencyInjection] inlined factory not referenced (boekkooi)
- * bug #12436 [Filesystem] Fixed case for empty folder (yosmanyga)
- * bug #12397 [Routing] fix BC (nicolas-grekas)
- * bug #12382 [Routing] removed errors from git (HeinZawHtet)
- * bug #12370 [Yaml] improve error message for multiple documents (xabbuh)
- * bug #12170 [Form] fix form handling with OPTIONS request method (Tobion)
- * bug #12235 [Validator] Fixed Regex::getHtmlPattern() to work with complex and negated patterns (webmozart)
- * bug #12326 [Session] remove invalid hack in session regenerate (Tobion)
- * bug #12341 [Kernel] ensure session is saved before sending response (Tobion)
- * bug #12329 [Routing] serialize the compiled route to speed things up (Tobion)
- * bug #12291 [Form] Fixed usage of "name" variable in form_start block (webmozart)
- * bug #12316 Break infinite loop while resolving aliases (chx)
- * bug #12313 [Security][listener] change priority of switchuser (aitboudad)
-
-* 2.5.6 (2014-10-24)
-
- * bug #11696 [Form] Fix #11694 - Enforce options value type check in some form types (kix)
- * bug #12225 [SecurityBundle] Add trust_resolver variable into expression (zulus)
- * bug #12209 [FrameworkBundle] Fixed ide links (hason)
- * bug #12208 Add missing argument (WouterJ)
- * bug #12197 [TwigBundle] do not pass a template reference to twig (Tobion)
- * bug #12196 [TwigBundle] show correct fallback exception template in debug mode (Tobion)
- * bug #12187 [CssSelector] don't raise warnings when exception is thrown (xabbuh)
- * bug #12151 [Framework][DX] Set the proper validator class according to the configured api version (peterrehm)
- * bug #12128 [Console] clean handling of :: passed to find() (xabbuh)
- * bug #11998 [Intl] Integrated ICU data into Intl component #2 (webmozart)
- * bug #11920 [Intl] Integrated ICU data into Intl component #1 (webmozart)
-
-* 2.5.5 (2014-09-28)
-
- * bug #12016 [Validator] Added ConstraintValidator::buildViolation() helper for BC with the 2.4 API (webmozart)
- * bug #12031 [Validator] Fixed LegacyValidator when only a constraint is validated (webmozart)
- * bug #9453 [Form][DateTime] Propagate invalid_message & invalid_message_parameters to date & time (egeloen)
- * bug #12030 Fix expression language in the container when using the "container" variable (fabpot)
- * bug #12032 [Command] Set the process title as late as possible (lyrixx)
- * bug #11058 [Security] bug #10242 Missing checkPreAuth from RememberMeAuthenticationProvider (glutamatt)
- * bug #12004 [Form] Fixed ValidatorTypeGuesser to guess properties without constraints not to be required (webmozart)
- * bug #11904 Make twig ExceptionController conformed with ExceptionListener (megazoll)
- * bug #11924 [Form] Moved POST_MAX_SIZE validation from FormValidator to request handler (rpg600, webmozart)
- * bug #12002 [Security] [Firewall] Bug fixed in SimplePreAuthenticationListener when createToken() not return TokenInterface object (adenkejawen, fabpot)
- * bug #11079 Response::isNotModified returns true when If-Modified-Since is later than Last-Modified (skolodyazhnyy)
- * bug #11989 [Finder][Urgent] Remove asterisk and question mark from folder name in test to prevent windows file system issues. (Adam)
- * bug #11908 [Translation] [Config] Clear libxml errors after parsing xliff file (pulzarraider)
- * bug #11839 [FrameworkBundle] check if the Validator component is present when forms are enabled (xabbuh)
- * bug #11418 [JsonResponse] Silent only JSON errors (GromNaN)
- * bug #11937 [HttpKernel] Make sure HttpCache is a trusted proxy (thewilkybarkid)
- * bug #11970 [Finder] Escape location for regex searches (ymc-dabe)
- * bug #11837 Use getPathname() instead of string casting to get BinaryFileReponse file path (nervo)
- * bug #11513 [Translation] made XliffFileDumper support CDATA sections. (hhamon)
- * bug #11928 [Validator] The ratio of the ImageValidator is rounded to two decimals now (webmozart)
- * bug #11907 [Intl] Improved bundle reader implementations (webmozart)
- * bug #11874 [Console] guarded against non-traversable aliases (thierrymarianne)
- * bug #11799 [YAML] fix handling of empty sequence items (xabbuh)
- * bug #11906 [Intl] Fixed a few bugs in TextBundleWriter (webmozart)
- * bug #11459 [Form][Validator] All index items after children are to be considered grand-children when resolving ViolationPath (Andrew Moore)
- * bug #11715 [Form] FormBuilder::getIterator() now deals with resolved children (issei-m)
- * bug #11892 [SwiftmailerBridge] Bump allowed versions of swiftmailer (ymc-dabe)
- * bug #11918 [DependencyInjection] remove `service` parameter type from XSD (xabbuh)
- * bug #11905 [Intl] Removed non-working $fallback argument from ArrayAccessibleResourceBundle (webmozart)
- * bug #11497 Use separated function to resolve command and related arguments (JJK801)
- * bug #11374 [DI] Added safeguards against invalid config in the YamlFileLoader (stof)
- * bug #11897 [FrameworkBundle] Remove invalid markup (flack)
- * bug #11860 [Security] Fix usage of unexistent method in DoctrineAclCache. (mauchede)
- * bug #11850 [YAML] properly mask escape sequences in quoted strings (xabbuh)
- * bug #11856 [FrameworkBundle] backport more error information from 2.6 to 2.3 (xabbuh)
- * bug #11843 [Yaml] improve error message when detecting unquoted asterisks (xabbuh)
-
-* 2.5.4 (2014-09-03)
-
- * security #11832 CVE-2014-6072 (fabpot)
- * security #11831 CVE-2014-5245 (stof)
- * security #11830 CVE-2014-4931 (aitboudad, Jérémy Derussé)
- * security #11829 CVE-2014-6061 (damz, fabpot)
- * security #11828 CVE-2014-5244 (nicolas-grekas, larowlan)
- * bug #10197 [FrameworkBundle] PhpExtractor bugfix and improvements (mtibben)
- * bug #11772 [Filesystem] Add FTP stream wrapper context option to enable overwrite (Damian Sromek)
- * bug #11791 [Process] fix mustRun() in sigchild environments (xabbuh)
- * bug #11788 [Yaml] fixed mapping keys containing a quoted # (hvt, fabpot)
- * bug #11787 fixed DateComparator if file does not exist (avi123)
- * bug #11160 [DoctrineBridge] Abstract Doctrine Subscribers with tags (merk)
- * bug #11768 [ClassLoader] Add a __call() method to XcacheClassLoader (tstoeckler)
- * bug #11739 [Validator] Pass strict argument into the strict email validator (brianfreytag)
- * bug #11749 [TwigBundle] Remove hard dependency of RequestContext in AssetsExtension (pgodel)
- * bug #11726 [Filesystem Component] mkdir race condition fix #11626 (kcassam)
- * bug #11677 [YAML] resolve variables in inlined YAML (xabbuh)
- * bug #11639 [DependencyInjection] Fixed factory service not within the ServiceReferenceGraph. (boekkooi)
- * bug #11778 [Validator] Fixed wrong translations for Collection constraints (samicemalone)
- * bug #11756 [DependencyInjection] fix @return anno created by PhpDumper (jakubkulhan)
- * bug #11711 [DoctrineBridge] Fix empty parameter logging in the dbal logger (jakzal)
- * bug #11692 [DomCrawler] check for the correct field type (xabbuh)
- * bug #11672 [Routing] fix handling of nullable XML attributes (xabbuh)
- * bug #11624 [DomCrawler] fix the axes handling in a bc way (xabbuh)
- * bug #11676 [Form] Fixed #11675 ValueToDuplicatesTransformer accept "0" value (Nek-)
- * bug #11695 [Validators] Fixed failing tests requiring ICU 52.1 which are skipped otherwise (webmozart)
- * bug #11584 [FrameworkBundle] Fixed validator factory definition when the Validator API is "auto" for PHP < 5.3.9 (webmozart)
- * bug #11645 [Form] Fixed ValidatorExtension to work with the 2.5 Validation API (webmozart)
- * bug #11529 [WebProfilerBundle] Fixed double height of canvas (hason)
- * bug #11666 [DIC] Fixed: anonymous services are always private (lyrixx)
- * bug #11641 [WebProfilerBundle ] Fix toolbar vertical alignment (blaugueux)
- * bug #11637 fix dependencies on HttpFoundation component (xabbuh)
- * bug #11559 [Validator] Convert objects to string in comparison validators (webmozart)
- * feature #11510 [HttpFoundation] MongoDbSessionHandler supports auto expiry via configurable expiry_field (catchamonkey)
- * bug #11408 [HttpFoundation] Update QUERY_STRING when overrideGlobals (yguedidi)
- * bug #11625 [FrameworkBundle] resolve parameters before the configs are processed in the config:debug command (xabbuh)
- * bug #11633 [FrameworkBundle] add missing attribute to XSD (xabbuh)
- * bug #11601 [Validator] Allow basic auth in url when using UrlValidator. (blaugueux)
- * bug #11609 [Console] fixed style creation when providing an unknown tag option (fabpot)
- * bug #10914 [HttpKernel] added an analyze of environment parameters for built-in server (mauchede)
- * bug #11598 [Finder] Shell escape and windows support (Gordon Franke, gimler)
- * bug #11582 [DoctrineBridge] Changed UniqueEntityValidator to use the 2.5 Validation API (webmozart)
-
-* 2.5.3 (2014-08-06)
-
- * bug #11571 [Form] Fixed FormValidator compatibility with the non-BC 2.5 Validation API (webmozart)
- * bug #11499 [BrowserKit] Fixed relative redirects for ambiguous paths (pkruithof)
- * bug #11516 [BrowserKit] Fix browser kit redirect with ports (dakota)
- * bug #11545 [Bundle][FrameworkBundle] built-in server: exit when docroot does not exist (xabbuh)
- * bug #11560 Plural fix (1emming)
- * bug #11558 [DependencyInjection] Fixed missing 'factory-class' attribute in XmlDumper output (kerdany)
- * bug #11498 [Validator] Made it possible (again) to pass a class name to validatePropertyValue() (webmozart)
- * bug #11548 [Component][DomCrawler] fix axes handling in Crawler::filterXPath() (xabbuh)
- * bug #11422 [DependencyInjection] Self-referenced 'service_container' service breaks garbage collection (sun)
- * bug #11428 [Serializer] properly handle null data when denormalizing (xabbuh)
- * bug #10687 [Validator] Fixed string conversion in constraint violations (eagleoneraptor, webmozart)
- * bug #11412 [Validator] Made sure that context changes don't leak out of (Contextual)ValidatorInterface (webmozart)
- * bug #11475 [EventDispatcher] don't count empty listeners (xabbuh)
- * bug #11436 fix signal handling in wait() on calls to stop() (xabbuh, romainneutron)
- * bug #11469 [BrowserKit] Fixed server HTTP_HOST port uri conversion (bcremer, fabpot)
- * bug #11425 Fix issue described in #11421 (Ben, ben-rosio)
- * bug #11423 Pass a Scope instance instead of a scope name when cloning a container in the GrahpvizDumper (jakzal)
- * bug #11448 [MonologBridge] fixed Console handler priorities (fabpot)
- * bug #11454 [Validator] Fixed memory leak in ValidatorBuilder (webmozart)
- * bug #11120 [Process] Reduce I/O load on Windows platform (romainneutron)
- * bug #11370 [FrameworkBundle] avoid raising unexpected RuntimeException when specifying $_SERVER['KERNEL_DIR'] (iteman)
- * bug #11342 [Form] Check if IntlDateFormatter constructor returned a valid object before using it (romainneutron)
- * bug #11439 [ExpressionLanguage] Fixed double quoted string literals containing sharps (pylebecq)
- * bug #11410 [Validator] Fixed object initializers in 2.5 version of the Validator (webmozart)
- * bug #11411 [Validator] Backported #11410 to 2.3: Object initializers are called only once per object (webmozart)
- * bug #11403 [Translator][FrameworkBundle] Added @ to the list of allowed chars in Translator (takeit)
- * bug #11381 [Process] Use correct test for empty string in UnixPipes (whs, romainneutron)
-
-* 2.5.2 (2014-07-15)
-
- * [Security] Forced validate of locales passed to the translator
- * bug #11350 [Form] solved dependency to ValidatorInterface, fix #11036 (Sebastian Blum)
- * bug #11278 Remove Spaceless Blocks From Twig Templates (chrisguitarguy)
- * feature #11367 [HttpFoundation] Fix to prevent magic bytes injection in JSONP responses... (CVE-2014-4671) (Andrew Moore)
- * bug #11284 [Console] Remove estimated field from debug_nomax (bburnichon)
- * bug #11386 Remove Spaceless Blocks from Twig Form Templates (chrisguitarguy)
- * bug #9719 [TwigBundle] fix configuration tree for paths (mdavis1982, cordoval)
- * bug #11244 [HttpFoundation] Remove body-related headers when sending the response, if body is empty (SimonSimCity)
-
-* 2.5.1 (2014-07-08)
-
- * bug #11283 [SecurityBundle] Remove Expression Language services when the component is unavailable (thewilkybarkid)
- * bug #11238 [Translation] Added unescaping of ids in PoFileLoader (JustBlackBird)
- * bug #11194 [DomCrawler] Remove the query string and the anchor of the uri of a link (benja-M-1)
- * bug #11272 [Console] Make sure formatter is the same. (akimsko)
- * bug #11259 [Config] Fixed failed config schema loads due to libxml_disable_entity_loader usage (ccorliss)
- * bug #11234 [ClassLoader] fixed PHP warning on PHP 5.3 (fabpot)
- * bug #11179 [Process] Fix ExecutableFinder with open basedir (cs278)
- * bug #11242 [CssSelector] Refactored the CssSelector to remove the circular object graph (stof)
- * bug #11219 [DomCrawler] properly handle buttons with single and double quotes insid... (xabbuh)
- * bug #11220 [Components][Serializer] optional constructor arguments can be omitted during the denormalization process (xabbuh)
- * bug #11186 Added missing `break` statement (apfelbox)
- * bug #11168 [YAML] fix merge node (<<) (Tobion)
- * bug #11170 [Console] Fixed notice in QuestionHelper (florianv)
- * bug #11169 [Console] Fixed notice in DialogHelper (florianv)
- * bug #11144 [HttpFoundation] Fixed Request::getPort returns incorrect value under IPv6 (kicken)
- * bug #11121 [Process] Do not redirect output to file handles when output is disabled, simply discard it (romainneutron)
- * bug #10966 PHP Fatal error when getContainer method of ContainerAwareCommand has be... (kevinvergauwen)
- * bug #10981 [HttpFoundation] Fixed isSecure() check to be compliant with the docs (Jannik Zschiesche)
- * bug #11117 [Validator] Fix array notation in the PropertyPath::append() (jakzal)
- * bug #11113 [HttpKernel] Fix event dispatcher dependency (hacfi)
- * bug #11111 Fixed undefined ImageValidator::$suffices property when uploading an image during functional tests (OwlyCode)
- * bug #11099 [Debug] work-around https://bugs.php.net/61272 (nicolas-grekas)
- * bug #11092 [HttpFoundation] Fix basic authentication in url with PHP-FPM (Kdecherf)
- * bug #11097 [Debug] simplify code path to remove potential blank pages (nicolas-grekas)
- * bug #10808 [DomCrawler] Empty select with attribute name="foo[]" bug fix (darles)
- * bug #11063 [HttpFoundation] fix switch statement (Tobion)
- * bug #11054 [Serializer] Xml encoder whitespace fix (fieg)
- * bug #11009 [HttpFoundation] smaller fixes for PdoSessionHandler (Tobion)
- * bug #11047 #10862 loadClassMetadata vs loadValidatorMetadata: revert default config (phramz)
- * bug #11042 [Debug] fix debug handlers config (nicolas-grekas)
- * bug #11043 [Console] OutputFormatter Unset Bold has wrong id (DZunke)
- * bug #11033 [Debug] fix wrong case mismatch exception (nicolas-grekas)
- * bug #11044 [Serializer] Fix BC break since 2.5 (fieg)
- * bug #11041 Remove undefined variable $e (skydiablo)
-
-* 2.5.0 (2014-05-31)
-
- * bug #11014 [Validator] Remove property and method targets from the optional and required constraints (jakzal)
- * bug #10983 [DomCrawler] Fixed charset detection in html5 meta charset tag (77web)
-
-* 2.5.0-RC1 (2014-05-28)
-
- * bug #10979 Make rootPath part of regex greedy (artursvonda)
- * bug #10995 [TwigBridge][Trans]set %count% only on transChoice from the current context. (aitboudad)
- * bug #10989 [Debug] throw even in stacking mode to preserve code paths (nicolas-grekas)
- * bug #10987 [DomCrawler] Fixed a forgotten case of complex XPath queries (stof)
- * feature #10930 [Process] Deprecate using values that are not string for Process::setStdin and ProcessBuilder::setInput (romainneutron)
- * bug #10971 [Process] Fix conflicts between latest 2.3 fix and 2.5 deprecation (romainneutron)
- * feature #10932 [Process] Deprecate Process::setStdin in favor of Process::setInput (romainneutron)
- * bug #10849 [WIP][Finder] Fix wrong implementation on sortable callback comparator (ProPheT777)
- * bug #10929 [Process] Add validation on Process input (romainneutron)
- * bug #10946 [PropertyAccess] Fixed getValue() when accessing non-existing indices of ArrayAccess implementations (webmozart)
- * bug #10958 [DomCrawler] Fixed filterXPath() chaining loosing the parent DOM nodes (stof, robbertkl)
- * bug #10953 [HttpKernel] fixed file uploads in functional tests without file selected (realmfoo)
- * feature #10941 [Debug] cleanup interfaces before 2.5-final (nicolas-grekas)
- * bug #10947 [PropertyAccess] Fixed getValue() when accessing non-existing indices of ArrayAccess implementations (webmozart)
- * bug #10937 [HttpKernel] Fix "absolute path" when we look to the cache directory (BenoitLeveque)
- * bug #10933 Changed the default value of checkbox and radio to match the HTML spec (stof)
- * bug #10927 [DomCrawler] Changed typehints form DomNode to DomElement (stof)
- * bug #10894 [HttpKernel] removed absolute paths from the generated container (fabpot)
- * bug #10926 [DomCrawler] Fixed the initial state for options without value attribute (stof)
- * bug #10925 [DomCrawler] Fixed the handling of boolean attributes in ChoiceFormField (stof)
- * feature #10882 Fix issue #10867 (umpirsky)
- * bug #10902 [Yaml] Fixed YAML Parser does not ignore duplicate keys, violating YAML spec. (sun)
- * feature #10912 [Form] Added support for injecting HttpFoundation's Request in ServerParams for the Validator extension (csarrazi)
- * bug #10777 [Form] Automatically add step attribute to HTML5 time widgets to display seconds if needed (tucksaun)
- * bug #10909 [PropertyAccess] Fixed plurals for -ves words (csarrazi)
- * bug #10904 [HttpKernel] Replace sha1 with sha256 in recently added tests (jakzal)
- * bug #10899 Explicitly define the encoding. (jakzal)
- * bug #10897 [Console] Fix a console test (jakzal)
- * bug #10896 [HttpKernel] Fixed cache behavior when TTL has expired and a default "global" TTL is defined (alquerci, fabpot)
- * bug #10841 [DomCrawler] Fixed image input case sensitive (geoffrey-brier)
- * bug #10714 [Console]Improve formatter for double-width character (denkiryokuhatsuden)
- * bug #10872 [Form] Fixed TrimListenerTest as of PHP 5.5 (webmozart)
- * feature #10880 [DependencyInjection] GraphvizDumper now displays unresolved parameters (rosstuck)
- * bug #10876 [Console] Make `Helper\Table::setStyle()` chainable again (stloyd)
- * bug #10762 [BrowserKit] Allow URLs that don't contain a path when creating a cookie from a string (thewilkybarkid)
- * bug #10861 [Debug] enhance perf of DebugClassLoader (nicolas-grekas)
- * bug #10863 [Security] Add check for supported attributes in AclVoter (artursvonda)
- * bug #10854 [Debug] fix handling deprecated warnings and stacked errors turned into exceptions (nicolas-grekas)
- * feature #10843 [TwigBridge] Added compile-time issues checking in twig:lint command (maxromanovsky)
- * feature #10829 Fix issue 9172 (umpirsky)
- * bug #10833 [TwigBridge][Transchoice] set %count% from the current context. (aitboudad)
- * bug #10820 [WebProfilerBundle] Fixed profiler seach/homepage with empty token (tucksaun)
- * bug #10809 Fixed composer to include config component for mocks in phpunit (jpauli)
- * bug #10815 Fixed issue #5427 (umpirsky)
- * bug #10817 [Debug] fix #10313: FlattenException not found (nicolas-grekas)
-
-* 2.5.0-BETA2 (2014-04-29)
-
- * bug #10803 [Debug] fix ErrorHandlerTest when context is not an array (nicolas-grekas)
- * bug #10801 [Debug] ErrorHandler: remove $GLOBALS from context in PHP5.3 fix #10292 (nicolas-grekas)
- * bug #10799 [Debug] less intrusive work around for https://bugs.php.net/54275 (nicolas-grekas)
- * bug #10797 [HttpFoundation] Allow File instance to be passed to BinaryFileResponse (anlutro)
- * bug #10798 [Console] Fix #10795: Allow instancing Console Application when STDIN is not declared (romainneutron)
- * bug #10643 [TwigBridge] Removed strict check when found variables inside a translation (goetas)
- * bug #10605 [ExpressionLanguage] Strict in_array check in Parser.php (parnas)
- * bug #10789 [Console] Fixed the rendering of exceptions on HHVM with a terminal width (stof)
- * bug #10773 [WebProfilerBundle ] Fixed an edge case on WDT loading (tucksaun)
- * feature #10786 [FrameworkBundle] removed support for HHVM built-in web server as it is deprecated now (fabpot)
- * bug #10784 [Security] removed $csrfTokenManager type hint from SimpleFormAuthenticationListener constructor argument (choonge)
- * bug #10776 [Debug] fix #10771 DebugClassLoader can't load PSR4 libs (nicolas-grekas)
- * bug #10763 [Process] Disable TTY mode on Windows platform (romainneutron)
- * bug #10772 [Finder] Fix ignoring of unreadable dirs in the RecursiveDirectoryIterator (jakzal)
- * bug #10757 [Process] Setting STDIN while running should not be possible (romainneutron)
- * bug #10749 Fixed incompatibility of x509 auth with nginx (alcaeus)
- * feature #10725 [Debug] Handled errors (nicolas-grekas)
- * bug #10735 [Translation] [PluralizationRules] Little correction for case 'ar' (klyk50)
- * bug #10720 [HttpFoundation] Fix DbalSessionHandler (Tobion)
- * bug #10721 [HttpFoundation] status 201 is allowed to have a body (Tobion)
- * bug #10728 [Process] Fix #10681, process are failing on Windows Server 2003 (romainneutron)
- * bug #10733 [DomCrawler] Textarea value should default to empty string instead of null. (Berdir)
- * bug #10723 [Security] fix DBAL connection typehint (Tobion)
- * bug #10715 [Debug] Fixed ClassNotFoundFatalErrorHandler on windows. (lyrixx)
- * bug #10700 Fixes various inconsistencies in the code (fabpot)
- * bug #10697 [Translation] Make IcuDatFileLoader/IcuResFileLoader::load invalid resource compatible with HHVM. (idn2104)
-
-* 2.5.0-BETA1 (2014-04-11)
-
- * first beta release
-
diff --git a/CHANGELOG-2.6.md b/CHANGELOG-2.6.md
deleted file mode 100644
index e466668f8f88c..0000000000000
--- a/CHANGELOG-2.6.md
+++ /dev/null
@@ -1,334 +0,0 @@
-CHANGELOG for 2.6.x
-===================
-
-This changelog references the relevant changes (bug and security fixes) done
-in 2.6 minor versions.
-
-To get the diff for a specific change, go to https://github.com/symfony/symfony/commit/XXX where XXX is the change hash
-To get the diff between two versions, go to https://github.com/symfony/symfony/compare/v2.6.0...v2.6.1
-
-* 2.6.10 (2015-07-13)
-
- * bug #15248 Added 'default' color (jaytaph)
- * bug #15243 Reload the session after regenerating its id (jakzal)
- * bug #15202 [Security] allow to use `method` in XML configs (xabbuh)
- * bug #15218 [Twig][Bridge] replaced `extends` with `use` in bootstrap_3_horizontal_layout.html.twig (MatTheCat)
- * bug #15223 [Finder] Command::addAtIndex() fails with Command instance argument (thunderer)
- * bug #15220 [DependencyInjection] Freeze also FrozenParameterBag::remove (lyrixx)
- * bug #15110 Add a way to reset the singleton (dawehner)
- * bug #15115 [Validator] always evaluate binary format when changed (xabbuh)
- * bug #15163 Update DateTimeToArrayTransformer.php (zhil)
- * bug #15150 [Translation] Azerbaijani language pluralization rule is wrong (shehi)
- * bug #15159 Towards 100% HHVM compat (nicolas-grekas)
- * bug #15146 Towards 100% HHVM compat (nicolas-grekas)
- * bug #15069 [Form] Fixed: Data mappers always receive forms indexed by their names (webmozart)
- * bug #15137 [Security] Initialize SwitchUserEvent::targetUser on attemptExitUser (Rvanlaak, xabbuh)
- * bug #15126 [Validator] Fix BC for Validator's validate method (michalmarcinkowski)
- * bug #15083 [DependencyInjection] Fail when dumping a Definition with no class nor factory (nicolas-grekas)
- * bug #15127 [Validator] fix validation for Maestro UK card numbers (xabbuh)
- * bug #15128 DbalLogger: Small nonutf8 array fix (vpetrovych, weaverryan)
- * bug #15048 [Translation][Form][choice] empty_value shouldn't be translated when it has an empty value (Restless-ET)
- * bug #15117 [Form] fixed sending non array data on submit to ResizeListener (BruceWouaigne)
- * bug #15102 [Translation][debug cmd] fixed failing tests. (aitboudad)
- * bug #13750 [DependencyInjection] Fixed decoration of service for service with parent (hason)
- * bug #15086 Fixed the regexp for the validator of Maestro-based credit/debit cards (javiereguiluz)
- * bug #15058 [Console] Fix STDERR output text on IBM iSeries OS400 (johnkary)
- * bug #14853 [Validator] more strict e-mail validation regex (xabbuh)
- * bug #15065 [Form] Fixed: remove quoted strings from Intl date formats (e.g. es_ES full pattern) (webmozart)
- * bug #15039 [Translation][update cmd] taken account into bundle overrides path. (aitboudad)
- * bug #15038 [Translation][debug cmd] taken account into bundle overrides path. (aitboudad)
- * bug #14964 [bugfix][MonologBridge] WebProcessor: passing $extraFields to BaseWebProcessor (MacDada)
- * bug #15036 [VarDumper] Fix dump output for better readability (nicolas-grekas)
- * bug #15027 [Form] Fixed: Filter non-integers when selecting entities by int ID (webmozart, nicolas-grekas)
- * bug #15000 [Debug] Fix fatal-errors handling on HHVM (nicolas-grekas)
- * bug #14999 [Debug] Fix fatal-errors handling on HHVM (nicolas-grekas, digitalkaoz)
- * bug #14959 [Debug+VarDumper] Fix handling of PHP7 "Throwable" exceptions (nicolas-grekas)
- * bug #15010 [Debug] Fix log level of stacked errors (nicolas-grekas)
- * bug #15017 [VarDumper] Fix uninitialized id in HtmlDumper (nicolas-grekas)
- * bug #14980 Fixed fluent interface (jaytaph)
- * bug #14974 [Security][Translation] #14920 update translations (vincentaubert)
- * bug #14930 Bug #14836 [HttpFoundation] Moves default JSON encoding assignment fr… (Incognito)
- * bug #14897 Allow new lines in Messages translated with transchoice() (replacement for #14867) (azine)
- * bug #14895 [Form] Support DateTimeImmutable in transform() (c960657)
- * bug #14891 without this change allways the legacy code get called (dominikzogg)
- * bug #14859 Improve the config validation in TwigBundle (stof)
- * bug #14785 [BrowserKit] Fix bug when uri starts with http. (amouhzi)
- * bug #14807 [Security][Acl] enforce string identifiers (xabbuh)
- * bug #14808 [WebProfilerBundle][logger] added missing deprecation message. (aitboudad)
-
-* 2.6.9 (2015-05-30)
-
- * bug #14777 Avoid using the app global variable in the profiler templates (stof)
- * bug #14262 [REVERTED] [TwigBundle] Refresh twig paths when resources change. (aitboudad)
-
-* 2.6.8 (2015-05-27)
-
- * security #14759 CVE-2015-4050 [HttpKernel] Do not call the FragmentListener if _controller is already defined (jakzal)
- * bug #14743 [DebugBundle] Fix config XSD (nicolas-grekas)
- * bug #14726 [Translation] fixed JSON loader on PHP 7 when file is empty (fabpot)
- * bug #14715 [Form] Check instance of FormBuilderInterface instead of FormBuilder (dosten)
- * bug #14678 [Security] AbstractRememberMeServices::encodeCookie() validates cookie parts (MacDada)
- * bug #14635 [HttpKernel] Handle an array vary header in the http cache store (jakzal)
- * bug #14513 [console][formater] allow format toString object. (aitboudad)
- * bug #14335 [HttpFoundation] Fix baseUrl when script filename is contained in pathInfo (danez)
- * bug #14593 [Security][Firewall] Avoid redirection to XHR URIs (asiragusa)
- * bug #14618 [DomCrawler] Throw an exception if a form field path is incomplete (jakzal)
- * bug #14699 Fix HTML escaping of to-source links (amenk, nicolas-grekas)
- * bug #14698 Fix HTML escaping of to-source links (nicolas-grekas)
- * bug #14690 [HttpFoundation] IpUtils::checkIp4() should allow `/0` networks (zerkms)
- * bug #14696 Fix the rendering of deprecation log messages (stof)
- * bug #14683 Fixed the indentation in the compiled template for the DumpNode (stof)
- * bug #14262 [TwigBundle] Refresh twig paths when resources change. (aitboudad)
- * bug #13633 [ServerBag] Handled bearer authorization header in REDIRECT_ form (Lance0312)
- * bug #13637 [CSS] WebProfiler break words (nicovak)
- * bug #14217 [WebProfilerBundle] Fix regexp (romqin)
- * bug #14644 [Bridge\Twig] Adding a space between the icon and the error message (zmikael, nicolas-grekas)
- * bug #14640 [DebugBundle] Allow alternative destination for dumps (nicolas-grekas)
- * bug #14633 [EventDispatcher] make listeners removable from an executed listener (xabbuh)
- * bug #14609 [DebugBundle] Remove inlined dumps on XHR (nicolas-grekas)
- * bug #14605 [PropertyAccess] Fix setting public property on a class having a magic getter (lolautruche)
-
-* 2.6.7 (2015-05-11)
-
- * bug #14266 [HttpKernel] Check if "symfony/proxy-manager-bridge" package is installed (hason)
- * bug #14478 [DebugBundle] Fix dump() output in API / No-Toolbar context (nicolas-grekas)
- * bug #14501 [ProxyBridge] Fix proxy classnames generation (xphere)
- * bug #14527 Fix getOrigin (WouterJ)
- * bug #14498 [FrameworkBundle] Added missing log in server:run command (lyrixx)
- * bug #14503 [Finder] Only use GLOB_BRACE when available (dosten)
- * bug #14484 [SecurityBundle][WebProfiler] check authenticated user by tokenClass instead of username. (aitboudad)
- * bug #14497 [HttpFoundation] Allow curly braces in trusted host patterns (sgrodzicki)
- * bug #14480 [TwigBundle] Fix deprecated use of FlattenException (alOneh)
- * bug #14469 [Debug] BaseException compatibility for PHP7 (nicolas-grekas)
- * bug #14466 [WebProfiler] fix html syntax for input types (Tobion)
- * bug #14436 Show a better error when the port is in use (dosten)
- * bug #14463 [Validator] Fixed Choice when an empty array is used in the "choices" option (webmozart)
- * bug #14446 [DependencyInjection] resolve circular reference (xabbuh)
- * bug #14448 [Validator] Fixed Choice when an empty array is used in the "choices" option (webmozart)
- * bug #14451 [Debug] Fix ClassNotFoundFatalErrorHandler candidates lookups (nicolas-grekas)
- * bug #14355 [EventDispatcher] make listeners removable from an executed listener (xabbuh)
- * bug #14402 [FrameworkBundle][Translation] Check for 'xlf' instead of 'xliff' (xelaris)
- * bug #14272 [FrameworkBundle] Workaround php -S ignoring auto_prepend_file (nicolas-grekas)
- * bug #14362 [Debug] Scream as LogLevel::DEBUG (but for fatal errors / uncaught exceptions) (nicolas-grekas)
- * bug #14345 [FrameworkBundle] Fix Routing\DelegatingLoader resiliency to fatal errors (nicolas-grekas)
- * bug #14381 [FrameworkBundle] Initialize translator with the default locale. (aitboudad)
- * bug #14325 [Routing][DependencyInjection] Support .yaml extension in YAML loaders (thunderer)
- * bug #14344 [Translation][fixed test] refresh cache when resources are no longer fresh. (aitboudad)
- * bug #14346 [WebProfilerBundle] Fix resiliency to exceptions thrown by the url generator (nicolas-grekas)
- * bug #14338 [FrameworkBundle] improve usage of Table helper (xabbuh)
- * bug #14129 [FrameworkBundle] Fixed server:start --router relative path issue #14124 (abulford)
- * bug #14271 [VarDumper] Fix call site detection (nicolas-grekas)
- * bug #14277 [Translator] Cache does not take fallback locales into consideration (mpdude)
- * bug #14268 [Translator] Cache does not take fallback locales into consideration (sf2.3) (mpdude)
- * bug #14256 [Form] Fixed DateType/TimeType (webmozart)
- * bug #14226 [Profiler][Logger] fixed cycle odd/even. (aitboudad)
- * bug #14204 [VarDumper] Towards PHP7 support (nicolas-grekas)
- * bug #14205 Fix currently broken tests (mpdude)
- * bug #14192 [HttpKernel] Embed the original exception as previous to bounced exceptions (nicolas-grekas)
- * bug #14102 [Enhancement] netbeans - force interactive shell when limited detection (cordoval)
- * bug #14191 [StringUtil] Fixed singularification of 'movies' (GerbenWijnja)
- * bug #14182 [FrameworkBundle] fixes displaying of deprecation notices. (hhamon)
- * feature #14186 [Debug] Renamed "context" key to "scope_vars" to avoid any ambiguity (lyrixx)
- * bug #14170 Fix the AJAX profiling (stof)
-
-* 2.6.6 (2015-04-01)
-
- * security #14167 CVE-2015-2308 (nicolas-grekas)
- * security #14166 CVE-2015-2309 (neclimdul)
- * bug #14126 [VarDumper] Fix toggle action to see source excerpt (nicolas-grekas)
- * bug #14114 [VarDumper] Fix dumping references as properties (nicolas-grekas)
- * bug #14074 [VarDumper] Fix dumping ThrowingCasterException (nicolas-grekas)
- * bug #12948 [Form] [TwigBridge] Bootstrap layout whitespace control (mvar)
- * bug #14046 [Security] StringUtils::equals() arguments in RememberMe Cookie based implementation are confused (zerkms)
- * bug #14010 Replace GET parameters when changed in form (WouterJ)
- * bug #13991 [Dependency Injection] Improve PhpDumper Performance for huge Containers (BattleRattle)
- * bug #13886 [FrameworkBundle][debug:config] added support for dynamic configurations... (aitboudad)
- * bug #14013 [DependencyInjection] prevent inlining service configurators (xabbuh)
- * bug #14012 [DomCrawler] Improve namespace discovery performance (jakzal)
- * bug #13997 [2.3+][Form][DoctrineBridge] Improved loading of entities and documents (guilhermeblanco)
- * bug #13978 [WebProfilerBundle] Fix javascript toolbar on IE8 (romainneutron)
- * bug #13987 [WebProfilerBundle] fixed undefined buttons variable. (aitboudad)
- * bug #13953 [Translation][MoFileLoader] fixed load empty translation. (aitboudad)
- * bug #13912 [DependencyInjection] Highest precedence for user parameters (lyrixx)
-
-* 2.6.5 (2015-03-17)
-
- * bug #13944 [HttpKernel] UriSigner::buildUrl - default params for http_build_query (Jakub Simon)
- * bug #13896 [ExpressionLanguage] fixed issues when parsing postfix expressions (zerustech)
- * bug #13914 [DependencyInjection] do not inline service factories (xabbuh)
- * bug #13924 [DependencyInjection] resolve class parameters in service factories (xabbuh)
- * bug #13927 Fixing wrong variable name from #13519 (weaverryan)
- * bug #13519 [DependencyInjection] fixed service resolution for factories (fabpot)
- * bug #13790 [acl][command][SecurityBundle] Fixed user input option mode to be an Array (benjaminlong)
- * bug #13902 [Debug] reintroduce charset param to ExceptionHandler (nicolas-grekas)
- * bug #13901 [Bundle] Fix charset config (nicolas-grekas, bamarni)
- * bug #13911 [HttpFoundation] MongoDbSessionHandler::read() now checks for valid session age (bzikarsky)
- * bug #13883 #13857 Added default button class (Piers Warmers)
- * bug #13890 Fix XSS in Debug exception handler (fabpot)
- * bug #13860 [VarDumper] Fix "next element is already occupied" (nicolas-grekas)
- * bug #13806 [TwigBridge] Bootstrap Layout - Fix the label of checkbox cannot be empty (ogizanagi)
- * bug #13835 [PropertyAccess] stop overwriting once a reference is reached (3rd) (bananer)
- * bug #13814 [Twig] bootstrap_3_layout.html.twig is traitable (Dusan Kasan)
- * bug #13816 [OptionsResolver] fix allowed values with null (Tobion)
- * bug #13744 minor #13377 [Console] Change greater by greater or equal for isFresh in FileResource (bijibox)
- * bug #13708 [HttpFoundation] fixed param order for Nginx's x-accel-mapping (phansys)
- * bug #13767 [HttpKernel] Throw double-bounce exceptions (nicolas-grekas)
- * bug #13785 [VarDumper] Workaround stringy numeric keys (nicolas-grekas)
- * bug #13769 [Form] NativeRequestHandler file handling fix (mpajunen)
- * bug #13779 [FrameworkBundle] silence E_USER_DEPRECATED in insulated clients (nicolas-grekas)
- * bug #13715 Enforce UTF-8 charset for core controllers (WouterJ)
- * bug #13683 [PROCESS] make sure /dev/tty is readable (staabm)
- * bug #13733 [Process] Fixed PhpProcess::getCommandLine() result (francisbesset)
- * bug #13729 Fix the toolbar JS for IE (stof)
- * bug #13693 [HttpKernel] Fixed DumpDataCollector: dump.name for Windows file paths (King2500)
- * bug #13618 [PropertyAccess] Fixed invalid feedback -> foodback singularization (WouterJ)
- * bug #13685 [WebProfilerBundle] Fix for broken profiler layout (kbond)
- * bug #13636 [WebProfilerBundle] Fixes event listener attaching error in IE (aik099)
- * bug #13630 [Console] fixed ArrayInput, if array contains 0 key. (arima-ryunosuke)
- * bug #13647 [FrameworkBundle] Fix title and placeholder rendering in php form templates (jakzal)
- * bug #13608 Fix form icon position in web profiler (sadikoff)
- * bug #13642 [Translator][Logging] implement TranslatorBagInterface. (aitboudad)
- * bug #13607 [Console] Fixed output bug, if escaped string in a formatted string. (tronsha)
- * bug #13611 [Console] “console help” ignores --raw option (c960657)
- * bug #13466 [Security] Remove ContextListener's onKernelResponse listener as it is used (davedevelopment)
- * bug #12864 [Console][Table] Fix cell padding with multi-byte (ttsuruoka)
- * bug #13201 [FrameworkBundle][config cmd] initialize extension. (aitboudad)
- * bug #13375 [YAML] Fix one-liners to work with multiple new lines (Alex Pott)
- * bug #13545 fixxed order of usage (OskarStark)
- * bug #13577 [HttpKernel] Added use of instantiateController method provided in (#12022) (stavichenko)
- * bug #13567 [Routing] make host matching case-insensitive (Tobion)
-
-* 2.6.4 (2015-02-02)
-
- * bug #13489 [VarDumper] CSS fix (Arrilot)
- * bug #13441 [VarDumper] fix handling of non-UTF8 strings (nicolas-grekas)
- * bug #13528 [Validator] reject ill-formed strings (nicolas-grekas)
- * bug #13525 [Validator] UniqueEntityValidator - invalidValue fixed. (Dawid Sajdak)
- * bug #13549 [EventDispatcher] Wrong EventDispatcher instance injected in listeners (dosten)
- * bug #13527 [Validator] drop grapheme_strlen in LengthValidator (nicolas-grekas)
- * bug #12649 [Hackday] [Toolbar] Fix info position and icons on small screens (stefanosala)
- * bug #13376 [FrameworkBundle][config] allow multiple fallback locales. (aitboudad)
- * bug #13473 [FrameworkBundle][xsd] added missing logging attribute. (aitboudad)
- * bug #12972 Make the container considered non-fresh if the environment parameters are changed (thewilkybarkid)
- * bug #13309 [Console] fixed 10531 (nacmartin)
- * bug #13352 [Yaml] fixed parse shortcut Key after unindented collection. (aitboudad)
- * bug #13501 [TwigBridge] Fix bootstrap rendering when user explicitly use form_label (lyrixx)
- * bug #13487 [VarDumper] Fixed HtmlDumper with long string (alOneh)
- * bug #13343 [FrameworkBundle] FormDataCollector should be loaded only if form config is enabled (hason)
- * bug #12258 [FrameworkBundle] print error message if server couldn't be started (xabbuh)
- * bug #13039 [HttpFoundation] [Request] fix baseUrl parsing to fix wrong path_info (rk3rn3r)
- * bug #13250 [Twig][Bridge][TranslationDefaultDomain] add support of named arguments. (aitboudad)
- * bug #13332 [Console] ArgvInput and empty tokens (Taluu)
- * bug #13353 [DependencyInjection] Fix missing ExpressionLanguageProviders (szicsu)
- * bug #13293 [EventDispatcher] Add missing checks to RegisterListenersPass (znerol)
- * bug #13262 [Yaml] Improve YAML boolean escaping (petert82, larowlan)
- * bug #13420 [Debug] fix loading order for legacy classes (nicolas-grekas)
- * bug #13421 [FrameworkBundle] fix routing descriptor for options (Tobion)
- * bug #13405 [TwigBridge] exit when Twig environment is not set in the LintCommand (xabbuh)
- * bug #13351 [VarDumper] fix very special vars handling (nicolas-grekas)
- * bug #13371 fix missing comma in YamlDumper (garak)
- * bug #13365 [HttpFoundation] Make use of isEmpty() method (xelaris)
- * bug #13355 [Console] Helper\Table->addRow optimization (boekkooi)
- * bug #13347 [Console] Helper\TableHelper->addRow optimization (boekkooi)
- * bug #13346 [PropertyAccessor] Allow null value for a array (2.3) (boekkooi)
- * bug #13170 [Form] Set a child type to text if added to the form without a type. (jakzal)
- * bug #13334 [Yaml] Fixed #10597: Improved Yaml directive parsing (VictoriaQ)
- * bug #13198 [Form] Fixed check of violation constraint #12792 (xelaris)
- * bug #13316 [Form] fixed the CSRF extension to allow using only the new interfaces (fabpot)
- * bug #13307 added missing support for factories in console descriptions (fabpot)
- * bug #13305 [FrameworkBundle] fixed missing information in some descriptors (fabpot)
-
-* 2.6.3 (2015-01-07)
-
- * bug #13286 [Security] Don't destroy the session on buggy php releases. (derrabus)
-
-* 2.6.2 (2015-01-07)
-
- * feature #13241 [Form] add back model_timezone and view_timezone options (xabbuh)
- * bug #13297 [Process] Fix input reset in WindowsPipes (mpajunen)
- * bug #12417 [HttpFoundation] Fix an issue caused by php's Bug #66606. (wusuopu)
- * bug #13200 Don't add Accept-Range header on unsafe HTTP requests (jaytaph)
- * bug #12491 [Security] Don't send remember cookie for sub request (blanchonvincent)
- * bug #12574 [HttpKernel] Fix UriSigner::check when _hash is not at the end of the uri (nyroDev)
- * bug #13185 Fixes Issue #13184 - incremental output getters now return empty strings (Bailey Parker)
- * bug #13153 [TwigBridge] bootstrap_3_layout.html.twig inline form rendering button problem fix #13150 (edvinasme)
- * bug #13183 [DependencyInjection] force ExpressionLanguage version >= 2.6 (xabbuh)
- * bug #13173 [Debug] fixes ClassNotFoundFatalErrorHandler to correctly handle class not found errors with Symfony ClassLoader component autoloaders. (hhamon)
- * bug #13166 Fix a web profiler form issue with fields added to the form after the form was built (jakzal)
- * bug #12911 Fix wrong DateTransformer timezone param for non-UTC configuration (Soullivaneuh)
- * bug #13145 [DomCrawler] Fix behaviour with tag (dkop, WouterJ)
- * bug #13027 fix #10054 - form data collector with dynamic fields (zulus)
- * bug #13141 [TwigBundle] Moved the setting of the default escaping strategy from the Twig engine to the Twig environment (fabpot)
- * bug #13114 [HttpFoundation] fixed error when an IP in the X-Forwarded-For HTTP head... (fabpot)
- * bug #12572 [HttpFoundation] fix checkip6 (Neime)
- * bug #13109 [Filesystem] restore ability to create broken symlinks (nicolas-grekas)
- * bug #13093 [TwigBundle] added missing absolute URL in Twig exceptions (fabpot)
- * bug #13087 [DependencyInjection] use/fix newest Definition::setFactory (nicolas-grekas)
- * bug #12975 [FrameworkBundle] Allow custom services for validator mapping cache. (jakzal)
- * bug #13068 Add LegacyPdoSessionHandler class (jeremylivingston)
- * bug #13075 [Config] fix error handler restoration in test (nicolas-grekas)
- * bug #13073 [VarDumper] fix and test PdoCaster (nicolas-grekas)
- * bug #13085 [FrameworkBundle] Fix dependency on ExtensionInterface over implementation (xphere)
- * bug #13081 [FrameworkBundle] forward error reporting level to insulated Client (nicolas-grekas)
- * bug #13053 [FrameworkBundle] Fixed Translation loader and update translation command. (saro0h)
- * bug #12900 [WebProfilerBundle] Fixed IE8 support (korotovsky)
- * bug #13047 [FrameworkBundle][Logging Translator] skip if param "translator.logging" doesn't exist. (aitboudad)
- * bug #13048 [Security] Delete old session on auth strategy migrate (xelaris)
- * bug #13035 Added the function providers as container resources (stof)
- * bug #13021 [FrameworkBundle] skip compiler pass if interface doesn't exist (xabbuh)
- * bug #12999 [FrameworkBundle] fix cache:clear command (nicolas-grekas)
- * bug #13004 add a limit and a test to FlattenExceptionTest. (Daniel Wehner)
- * bug #13013 Unify the way to provide expression functions for the DI container (stof)
- * bug #13009 [DebugBundle] fix link format handling with disabled templating (xabbuh)
- * bug #12996 [WebProfilerBundle] Fix placeholder date format (mvar)
- * bug #12961 fix session restart on PHP 5.3 (Tobion)
- * bug #12548 [Form] fixed a maxlength overring on a guessing (origaminal)
- * bug #12761 [Filesystem] symlink use RealPath instead LinkTarget (aitboudad)
- * bug #12848 [EventDispatcher] Fixed #12845 adding a listener to an event that is currently being dispatched (Pieter Jordaan)
- * bug #12935 [Security] Fixed ExpressionVoter - addExpressionLanguageProvider (Luca Genuzio)
- * bug #12855 [DependencyInjection] Perf php dumper (nicolas-grekas)
- * bug #12899 [WebProfiler] Tweaked ajax requests toolbar css reset (1ed)
- * bug #12913 Fix missing space in label_attr (garak)
- * bug #12894 [FrameworkBundle][Template name] avoid error message for the shortcut n... (aitboudad)
- * bug #12806 [Console] Removed the use of $this->getHelperSet() as it is null by default (saro0h)
- * bug #12858 [ClassLoader] Fix undefined index in ClassCollectionLoader (szicsu)
-
-* 2.6.1 (2014-12-03)
-
- * bug #12823 [DependencyInjection] fix PhpDumper (nicolas-grekas)
- * bug #12811 Configure firewall's kernel exception listener with configured entry point or a default entry point (rjkip)
- * bug #12770 [Filesystem] fix lock file permissions (nicolas-grekas)
- * bug #12784 [DependencyInjection] make paths relative to __DIR__ in the generated container (nicolas-grekas)
- * bug #12716 [ClassLoader] define constant only if it wasn't defined before (xabbuh)
-
-* 2.6.0 (2014-11-28)
-
- * bug #12553 [Debug] fix error message on double exception (nicolas-grekas)
- * bug #12550 [FrameworkBundle] backport #12489 (xabbuh)
- * bug #12437 [Validator] make DateTime objects represented as strings in the violation message (hhamon)
- * bug #12575 [WebProfilerBundle] Remove usage of app.request in search bar template (jeromemacias)
- * bug #12570 Fix initialized() with aliased services (Daniel Wehner)
-
-* 2.6.0-BETA2 (2014-11-23)
-
- * bug #12555 [Debug] fix ENT_SUBSTITUTE usage (nicolas-grekas)
- * feature #12538 [FrameworkBundle] be smarter when guessing the document root (xabbuh)
- * bug #12539 [TwigBundle] properly set request attributes in controller test (xabbuh)
- * bug #12267 [Form][WebProfiler] Empty form names fix (kix)
- * bug #12137 [FrameworkBundle] cache:clear command fills *.php.meta files with wrong data (Strate)
- * bug #12525 [Bundle][FrameworkBundle] be smarter when guessing the document root (xabbuh)
- * bug #12296 [SecurityBundle] Authentication entry point is only registered with firewall exception listener, not with authentication listeners (rjkip)
- * bug #12446 [Twig/DebugBundle] move dump extension registration (nicolas-grekas)
- * bug #12489 [FrameworkBundle] Fix server run in case the router script does not exist (romainneutron)
- * feature #12404 [Form] Remove timezone options from DateType and TimeType (jakzal)
- * bug #12487 [DomCrawler] Added support for 'link' tags in the Link class (StephaneSeng)
- * bug #12490 [FrameworkBundle] Fix server start in case the PHP binary is not found (romainneutron)
- * bug #12443 [HttpKernel] Adding support for invokable controllers in the RequestDataCollector (jameshalsall)
- * bug #12393 [DependencyInjection] inlined factory not referenced (boekkooi)
- * bug #12411 [VarDumper] Use Unicode Control Pictures (nicolas-grekas)
- * bug #12436 [Filesystem] Fixed case for empty folder (yosmanyga)
-
-* 2.6.0-BETA1 (2014-11-03)
-
- * first beta release
-
diff --git a/CHANGELOG-2.7.md b/CHANGELOG-2.7.md
deleted file mode 100644
index 86a2e432667a2..0000000000000
--- a/CHANGELOG-2.7.md
+++ /dev/null
@@ -1,296 +0,0 @@
-CHANGELOG for 2.7.x
-===================
-
-This changelog references the relevant changes (bug and security fixes) done
-in 2.7 minor versions.
-
-To get the diff for a specific change, go to https://github.com/symfony/symfony/commit/XXX where XXX is the change hash
-To get the diff between two versions, go to https://github.com/symfony/symfony/compare/v2.7.0...v2.7.1
-
-* 2.7.3 (2015-07-31)
-
- * bug #15413 Fix the return value on error for intl methods returning arrays (stof)
- * bug #15392 Fix missing _route parameter notice in RouterListener logging case (Haehnchen)
- * bug #15390 [php7] Fix for substr() always returning a string (nicolas-grekas)
- * bug #15386 [php7] Fix for substr() always returning a string (nicolas-grekas)
- * bug #15355 [Security] Do not save the target path in the session for a stateless firewall (lyrixx)
- * bug #15306 [HttpKernel] [HttpCache] Fix deprecated error in HttpCache#getSurrogate (m14t)
- * bug #15369 [TwigBridge] type-dependent path discovery (marcosdsanchez, xabbuh)
- * bug #15361 [Yaml] throw a ParseException on invalid data type (xabbuh)
- * bug #15345 [Twig+FrameworkBundle] Fix forward compat with Form 2.8 (nicolas-grekas)
- * bug #15330 [Console] Fix console output with closed stdout (jakzal)
- * bug #15339 [Serializer] Fix 2 bugs regarding private setters (dunglas)
- * bug #15326 [Security] fix check for empty usernames (xabbuh)
- * bug #15291 [HttpFoundation] Fix Response::closeOutputBuffers() for HHVM 3.3 (nicolas-grekas)
- * bug #15249 [HttpFoundation] [PSR-7] Allow to use resources as content body and to return resources from string content (dunglas)
- * bug #15282 [HttpFoundation] Behaviour change in PHP7 for substr (Nicofuma)
- * bug #15277 [Form] Fix a BC break in the entity (jakzal)
- * bug #15271 fix broken ChoiceQuestion (sstok)
- * bug #15250 [PropertyAccess] BC Break since 2.6.5 (Nicolas Macherey)
-
-* 2.7.2 (2015-07-13)
-
- * bug #15248 Added 'default' color (jaytaph)
- * bug #15243 Reload the session after regenerating its id (jakzal)
- * bug #15176 [Serializer] Fix ClassMetadata::sleep() (dunglas)
- * bug #15202 [Security] allow to use `method` in XML configs (xabbuh)
- * bug #15218 [Twig][Bridge] replaced `extends` with `use` in bootstrap_3_horizontal_layout.html.twig (MatTheCat)
- * bug #15223 [Finder] Command::addAtIndex() fails with Command instance argument (thunderer)
- * bug #15220 [DependencyInjection] Freeze also FrozenParameterBag::remove (lyrixx)
- * bug #15110 Add a way to reset the singleton (dawehner)
- * bug #15183 [TwigBridge] fix for legacy asset() with EmptyVersionStrategy (xabbuh)
- * bug #15115 [Validator] always evaluate binary format when changed (xabbuh)
- * bug #15163 Update DateTimeToArrayTransformer.php (zhil)
- * bug #15150 [Translation] Azerbaijani language pluralization rule is wrong (shehi)
- * bug #15159 Towards 100% HHVM compat (nicolas-grekas)
- * bug #15146 Towards 100% HHVM compat (nicolas-grekas)
- * bug #15061 [Form] Fixed handling of choices passed in choice groups (webmozart)
- * bug #15145 [Bridge/PhpUnit] Enforce a consistent locale (nicolas-grekas)
- * bug #15069 [Form] Fixed: Data mappers always receive forms indexed by their names (webmozart)
- * bug #15137 [Security] Initialize SwitchUserEvent::targetUser on attemptExitUser (Rvanlaak, xabbuh)
- * bug #15142 Fix choice translation domain for expanded choice widget (jvasseur)
- * bug #15126 [Validator] Fix BC for Validator's validate method (michalmarcinkowski)
- * bug #15101 [Form] Fixed compatibility with FormTypeInterface implementations that don't extend AbstractType (webmozart)
- * bug #15083 [DependencyInjection] Fail when dumping a Definition with no class nor factory (nicolas-grekas)
- * bug #15127 [Validator] fix validation for Maestro UK card numbers (xabbuh)
- * bug #15128 DbalLogger: Small nonutf8 array fix (vpetrovych, weaverryan)
- * bug #15048 [Translation][Form][choice] empty_value shouldn't be translated when it has an empty value (Restless-ET)
- * bug #15117 [Form] fixed sending non array data on submit to ResizeListener (BruceWouaigne)
- * bug #15122 [Console] respect multi-character shortcuts (xabbuh)
- * bug #15012 [Validator] don't trigger deprecation with empty group array (xabbuh)
- * bug #15102 [Translation][debug cmd] fixed failing tests. (aitboudad)
- * bug #13750 [DependencyInjection] Fixed decoration of service for service with parent (hason)
- * bug #15086 Fixed the regexp for the validator of Maestro-based credit/debit cards (javiereguiluz)
- * bug #15058 [Console] Fix STDERR output text on IBM iSeries OS400 (johnkary)
- * bug #14853 [Validator] more strict e-mail validation regex (xabbuh)
- * bug #15064 [Form] Fixed: Support objects with __toString() in choice groups (webmozart)
- * bug #15065 [Form] Fixed: remove quoted strings from Intl date formats (e.g. es_ES full pattern) (webmozart)
- * bug #15039 [Translation][update cmd] taken account into bundle overrides path. (aitboudad)
- * bug #15038 [Translation][debug cmd] taken account into bundle overrides path. (aitboudad)
- * bug #14964 [bugfix][MonologBridge] WebProcessor: passing $extraFields to BaseWebProcessor (MacDada)
- * bug #14989 [FrameworkBundle] Reuse PropertyAccessor service for ObjectNormalizer (dunglas)
- * bug #15036 [VarDumper] Fix dump output for better readability (nicolas-grekas)
- * bug #15031 [PhpUnitBridge] Enforce @-silencing of deprecation notices according to new policy (nicolas-grekas)
- * bug #15027 [Form] Fixed: Filter non-integers when selecting entities by int ID (webmozart, nicolas-grekas)
- * bug #15000 [Debug] Fix fatal-errors handling on HHVM (nicolas-grekas)
- * bug #14999 [Debug] Fix fatal-errors handling on HHVM (nicolas-grekas, digitalkaoz)
- * bug #14959 [Debug+VarDumper] Fix handling of PHP7 "Throwable" exceptions (nicolas-grekas)
- * bug #15010 [Debug] Fix log level of stacked errors (nicolas-grekas)
- * bug #15017 [VarDumper] Fix uninitialized id in HtmlDumper (nicolas-grekas)
- * bug #14980 Fixed fluent interface (jaytaph)
- * bug #14974 [Security][Translation] #14920 update translations (vincentaubert)
- * bug #14950 [Form] Fixed: Filter non-integers when selecting entities by int ID (webmozart)
- * bug #14930 Bug #14836 [HttpFoundation] Moves default JSON encoding assignment fr… (Incognito)
-
-* 2.7.1 (2015-06-11)
-
- * bug #14835 [DependencyInjection] Fixed resolving of service configurators containing Definition objects (webmozart)
- * bug #14816 [TwigBridge] Make AppVariable check if security.context exists (ogizanagi)
- * bug #14897 Allow new lines in Messages translated with transchoice() (replacement for #14867) (azine)
- * bug #14887 [Form] Swap new ChoiceView constructor arguments to ease migrating from the deprecated one (nicolas-grekas)
- * bug #14900 Silence deprecation warnings by default (reecefowell)
- * bug #14739 [Console] SymfonyStyle : fix blocks wordwrapping (ogizanagi)
- * bug #14740 [Console] SymfonyStyle : fix blocks output is broken on windows cmd (ogizanagi)
- * bug #14623 [Console] SymfonyStyle : fix & automate block gaps. (ogizanagi)
- * bug #14895 [Form] Support DateTimeImmutable in transform() (c960657)
- * bug #14891 without this change allways the legacy code get called (dominikzogg)
- * bug #14888 [Console] Fix ask and askHidden methods (dosten)
- * bug #14705 [Translator] avoid serialize unserializable resources. (aitboudad)
- * bug #14846 [console][TableCell] get cell width without decoration. (aitboudad)
- * bug #14852 [VarDumper] Fix generic casters calling order (nicolas-grekas)
- * bug #14855 [VarDumper] Changed tooltip to expand-all keybinding in OS X (taylankasap)
- * bug #14854 [Bridge\PhpUnit] Fix composer installed phpunit detection (nicolas-grekas)
- * bug #14859 Improve the config validation in TwigBundle (stof)
- * bug #14837 [SecurityBundle] Remove SecurityContext from Compile (Zander Baldwin)
- * bug #14793 [FrameworkBundle] make `templating.helper.router` service available again for BC reasons (xabbuh)
- * bug #14785 [BrowserKit] Fix bug when uri starts with http. (amouhzi)
- * bug #14807 [Security][Acl] enforce string identifiers (xabbuh)
- * bug #14808 [WebProfilerBundle][logger] added missing deprecation message. (aitboudad)
-
-* 2.7.0 (2015-05-30)
-
- * bug #14777 Avoid using the app global variable in the profiler templates (stof)
- * bug #14262 [REVERTED] [TwigBundle] Refresh twig paths when resources change. (aitboudad)
- * security #14759 CVE-2015-4050 [HttpKernel] Do not call the FragmentListener if _controller is already defined (jakzal)
- * bug #14745 [Serializer] AbstractNormalizer::instantiateObject allow default values when not optional (boekkooi)
- * bug #14743 [DebugBundle] Fix config XSD (nicolas-grekas)
- * bug #14711 [Serializer] AbstractNormalizer instantiateObject avoid `null` rejection (boekkooi)
- * bug #14726 [Translation] fixed JSON loader on PHP 7 when file is empty (fabpot)
- * bug #14715 [Form] Check instance of FormBuilderInterface instead of FormBuilder (dosten)
- * bug #14654 [Console] SymfonyStyle : fix blocks failed when $messages is null (ogizanagi)
- * bug #14708 [TwigBridge] use proper class to fetch asset version strategy property (xabbuh)
- * bug #14678 [Security] AbstractRememberMeServices::encodeCookie() validates cookie parts (MacDada)
- * bug #14635 [HttpKernel] Handle an array vary header in the http cache store (jakzal)
- * bug #14513 [console][formater] allow format toString object. (aitboudad)
- * bug #14335 [HttpFoundation] Fix baseUrl when script filename is contained in pathInfo (danez)
- * bug #14593 [Security][Firewall] Avoid redirection to XHR URIs (asiragusa)
- * bug #14576 [DoctrineBridge][Form] Fix BC break in DoctrineType (malarzm)
- * bug #14551 [Form] Fixed ChoiceType with legacy ChoiceList (xelaris)
- * bug #14648 [Console] Fix first choice was invalid when using value (ogizanagi)
- * bug #14618 [DomCrawler] Throw an exception if a form field path is incomplete (jakzal)
- * bug #14699 Fix HTML escaping of to-source links (amenk, nicolas-grekas)
- * bug #14698 Fix HTML escaping of to-source links (nicolas-grekas)
- * bug #14690 [HttpFoundation] IpUtils::checkIp4() should allow `/0` networks (zerkms)
- * bug #14696 Fix the rendering of deprecation log messages (stof)
- * bug #14683 Fixed the indentation in the compiled template for the DumpNode (stof)
- * bug #14262 [TwigBundle] Refresh twig paths when resources change. (aitboudad)
- * bug #13633 [ServerBag] Handled bearer authorization header in REDIRECT_ form (Lance0312)
- * bug #13637 [CSS] WebProfiler break words (nicovak)
- * bug #14217 [WebProfilerBundle] Fix regexp (romqin)
- * bug #14644 [Bridge\Twig] Adding a space between the icon and the error message (zmikael, nicolas-grekas)
- * bug #14645 [WebProfilerBundle] Fix compatiblity with HttpKernel < 2.7 (GromNaN)
- * bug #14640 [DebugBundle] Allow alternative destination for dumps (nicolas-grekas)
- * bug #14600 [Console] SymfonyStyle: fix block rpadding when escaping '<' (ogizanagi)
- * bug #14633 [EventDispatcher] make listeners removable from an executed listener (xabbuh)
-
-* 2.7.0-BETA2 (2015-05-13)
-
- * bug #14609 [DebugBundle] Remove inlined dumps on XHR (nicolas-grekas)
- * bug #14605 [PropertyAccess] Fix setting public property on a class having a magic getter (lolautruche)
- * bug #14266 [HttpKernel] Check if "symfony/proxy-manager-bridge" package is installed (hason)
- * bug #14465 [Form] Fixed regression: Empty values were not accepted anymore for collapsed, optional choice fields (webmozart)
- * bug #14478 [DebugBundle] Fix dump() output in API / No-Toolbar context (nicolas-grekas)
- * bug #14501 [ProxyBridge] Fix proxy classnames generation (xphere)
- * bug #14540 [Serializer] Ignore \Traversable in default normalizers. (dunglas)
- * bug #14527 Fix getOrigin (WouterJ)
- * bug #14395 [Validator] Property paths starting with 0 are broken. (fago)
- * feature #14472 [Debug] Trigger deprecation notices when using PHP7 reserved class names (nicolas-grekas)
- * bug #14498 [FrameworkBundle] Added missing log in server:run command (lyrixx)
- * bug #14503 [Finder] Only use GLOB_BRACE when available (dosten)
- * bug #14484 [SecurityBundle][WebProfiler] check authenticated user by tokenClass instead of username. (aitboudad)
- * bug #14497 [HttpFoundation] Allow curly braces in trusted host patterns (sgrodzicki)
- * bug #14480 [TwigBundle] Fix deprecated use of FlattenException (alOneh)
- * bug #14469 [Debug] BaseException compatibility for PHP7 (nicolas-grekas)
- * bug #14483 [VarDumper] Fix #14481 : Open tree recursively on OSX (romainneutron)
- * bug #14466 [WebProfiler] fix html syntax for input types (Tobion)
- * bug #14436 Show a better error when the port is in use (dosten)
- * bug #14463 [Validator] Fixed Choice when an empty array is used in the "choices" option (webmozart)
- * bug #14415 [Serializer] Fix a bug when using groups together with a name converter (dunglas)
- * bug #14301 [FrameworkBundle][Translation] skip warmUp when cache is not used. (aitboudad)
- * bug #14446 [DependencyInjection] resolve circular reference (xabbuh)
- * feature #14187 [Serializer] Supports hassers and setters for groups annotations (dunglas)
- * feature #14462 Revert "[HttpKernel] Throw a LogicException when kernel.exception does not led to a Response" (nicolas-grekas)
- * bug #14448 [Validator] Fixed Choice when an empty array is used in the "choices" option (webmozart)
- * bug #14451 [Debug] Fix ClassNotFoundFatalErrorHandler candidates lookups (nicolas-grekas)
- * bug #14422 Update DebugClassLoader.php (userfriendly)
- * bug #14419 inject asset packages in assets helper service (xabbuh)
- * bug #14355 [EventDispatcher] make listeners removable from an executed listener (xabbuh)
- * bug #14397 [Debug] Map PHP errors to LogLevel::CRITICAL (nicolas-grekas)
- * bug #14402 [FrameworkBundle][Translation] Check for 'xlf' instead of 'xliff' (xelaris)
- * bug #14272 [FrameworkBundle] Workaround php -S ignoring auto_prepend_file (nicolas-grekas)
- * bug #14362 [Debug] Scream as LogLevel::DEBUG (but for fatal errors / uncaught exceptions) (nicolas-grekas)
- * bug #14345 [FrameworkBundle] Fix Routing\DelegatingLoader resiliency to fatal errors (nicolas-grekas)
- * bug #14381 [FrameworkBundle] Initialize translator with the default locale. (aitboudad)
- * bug #14325 [Routing][DependencyInjection] Support .yaml extension in YAML loaders (thunderer)
- * bug #14344 [Translation][fixed test] refresh cache when resources are no longer fresh. (aitboudad)
- * bug #14346 [WebProfilerBundle] Fix resiliency to exceptions thrown by the url generator (nicolas-grekas)
- * bug #14338 [FrameworkBundle] improve usage of Table helper (xabbuh)
- * bug #14315 [Translation] Revert inlining fallback catalogues as it might cause inconsistent results when a cache is used (mpdude)
- * bug #14129 [FrameworkBundle] Fixed server:start --router relative path issue #14124 (abulford)
- * bug #14313 [HttpKernel] fixed a regression when no exception listeners are registered (fabpot)
- * bug #14268 [Translator] Cache does not take fallback locales into consideration (sf2.3) (mpdude)
-
-* 2.7.0-BETA1 (2015-04-10)
-
- * feature #14229 [WebProfilerBundle] AJAX links (romqin)
- * feature #13220 [Console] Made output docopt compatible (WouterJ)
- * feature #14178 [Config] Delegate creation of ConfigCache instances to a factory. (mpdude)
- * feature #13443 [Translation][Command][FrameworkBundle] Enable translation debugging in directories (xelaris)
- * feature #14198 Automatically start server:run if server:start failed (WouterJ)
- * feature #13651 [Form][choice] added choice_translation_domain to avoid trans options. (aitboudad)
- * feature #14185 [Translation][Profiler]added the number of times a translation has been used. (aitboudad)
- * feature #13717 Deprecated precision option in favor of scale (WouterJ)
- * feature #14159 [Debug] Add symfony_debug_backtrace() and use it when dealing with fatal errors (jpauli, nicolas-grekas)
- * feature #14192 [HttpKernel] Embed the original exception as previous to bounced exceptions (nicolas-grekas)
- * feature #13626 [WebProfilerBundle] Added feedback about the current symfony version (WouterJ)
- * feature #13554 [TwigBundle] make date formats and number formats configurable (xabbuh)
- * feature #14196 Tweaked some console command styles (javiereguiluz)
- * feature #14181 [Debug] Updated the default log level when a PHP error occurs (lyrixx)
- * feature #14186 [Debug] Renamed "context" key to "scope_vars" to avoid any ambiguity (lyrixx)
- * feature #13942 [Translation] generate translation cache at warmup (xavierleune)
- * feature #14116 [FrameworkBundle] Move lint commands to lint namespace. (aitboudad)
- * feature #14052 [FrameworkBundle] added a protected shortcut getParameter() method in the base Controller class. (hhamon)
- * feature #14080 [VarDumper] Add casters for Reflection* classes (nicolas-grekas)
- * feature #14050 [Form] Refactored choice lists to support dynamic label, value, index and attribute generation (webmozart)
- * feature #14079 [VarDumper] Add and use Caster::PREFIX_* consts (nicolas-grekas)
- * feature #14057 [RFC][Console] Added console style guide helpers (v2) (kbond)
- * feature #14077 [VarDumper] Add VarDumperTestCase and related trait (nicolas-grekas)
- * feature #14058 [VarDumper] Add filters to casters (nicolas-grekas)
- * feature #14003 [Translation][Profiler] Added a Translation profiler. (aitboudad)
- * feature #14002 [Translation][Extractor] Allow extracting an array of files besides extracting a directory (marcosdsanchez)
- * feature #13438 [Console][Table] Add support for colspan/rowspan + multiple header lines (aitboudad)
- * feature #14071 [VarDumper] Ctrl+click toggles-all and fix IE8 support (larsborn, nicolas-grekas)
- * feature #13981 [Translation] merge all fallback catalogues messages into current catalo... (aitboudad)
- * feature #14006 [VarDumper] with-er interface for Cloner\Data (nicolas-grekas)
- * feature #14034 [VarDumper] add caster for MongoCursor objects (nicolas-grekas)
- * feature #14030 [DependencyInjection] make it possible to dump inlined services to XML (xabbuh)
- * feature #14016 Remove the API version in the validator component (saro0h, fabpot, stof)
- * feature #13960 [VarDumper] Add Caster for XML-parser resources (nicolas-grekas)
- * feature #13937 [FrameworkBundle] Allow to disable Kernel reboot (sroze)
- * feature #13892 [DependencyInjection] Improved yaml syntax (hason)
- * feature #14000 [SECURITY][ACL] fixed Base ACL exceptions on the RuntimeException (Neophy7e)
- * feature #14001 [Security] [ACL] Improved MaskBuilder and PermissionMap (AlexDpy)
- * feature #13959 [VarDumper] Add catch-all-objects hook for casters (nicolas-grekas)
- * feature #13980 [VarDumper] Added support for amqp (lyrixx)
- * feature #12818 [SecurityBundle] Added a command to encode a password (saro0h)
- * feature #13107 [FrameworkBundle] Serializer groups support (dunglas)
- * feature #13872 [FrameworkBundle] Added domain column when debugging translations (hiddewie)
- * feature #13780 [HttpKernel] Throw a LogicException when kernel.exception does not lead to a Response (nicolas-grekas)
- * feature #13897 [translation][performances] move loading resources into Translator initialize. (aitboudad)
- * feature #13864 Entity type: loader caching by query builder instance (dominikzogg)
- * feature #13855 Read validation contraints from Resources/config/validation/ sub-dir (GromNaN)
- * feature #13257 [Serializer] ObjectNormalizer (dunglas)
- * feature #13795 [Serializer] Refactoring of metadata (dunglas)
- * feature #13840 [WebProfilerBundle] Update ajax calls in toolbar to add the css error class (rubenrua)
- * feature #13809 [OptionsResolver] add missing deprecation triggers (Tobion)
- * feature #13398 [PhpUnit] new PhpUnit bridge (nicolas-grekas)
- * feature #13615 [FrameworkBundle] Made ServerParams a service (rpg600)
- * feature #12526 Add an auto_alias compiler pass (Daniel Wehner)
- * feature #13665 [Debug] generalize deprecated interfaces tracking (nicolas-grekas)
- * feature #13656 removed Propel bridge from Symfony Core (fabpot)
- * feature #13500 [Serializer] Normalizers can serialize collections and scalars (dunglas)
- * feature #13463 [WebProfilerBundle] Replaced raster PNG icons with vector SVG icons (sgrodzicki)
- * feature #13234 [Asset] added the component (fabpot)
- * feature #11379 Added new Forwarded header support for Request::getClientIps (tony-co)
- * feature #9782 [Security] added string representation for core Users (tobiassjosten)
- * feature #12174 [TwigBundle] Add loader priority (wizhippo)
- * feature #13074 [Translation] Refresh catalogues when resources change (iamluc)
- * feature #13294 [PropertyAccess] Show property path in all exception messages (mpajunen)
- * feature #13548 [TwigBridge] Added support for passing more files to twig:lint command (sustmi)
- * feature #13120 [Serializer] Name converter support (dunglas)
- * feature #13428 Added a Twig profiler (fabpot)
- * feature #11129 Added i18n support to ConfirmationQuestion (WouterJ)
- * feature #13034 [HttpKernel] [WebProfilerBundle] added HTTP status to profiler search result (xelaris)
- * feature #13475 [SecurityBundle] decouple the logout PHP helper and Twig extension (fabpot)
- * feature #12891 [Form] Deprecated setDefaultOptions() in favor of configureOptions() (peterrehm)
- * feature #13342 [security] Fetching current stored context when not explicitly specified (jaytaph)
- * feature #12960 [FrameworkBundle] Container parameters in Route#condition (nikita2206)
- * feature #13418 [DX] Attempt to improve logging messages with parameters (iltar)
- * feature #13320 [HttpKernel] Add request uri to Logger context (Rvanlaak)
- * feature #13401 [TwigBundle] use the new Twig autoescaping strategy (fabpot)
- * feature #13361 [Routing] apply deprecation triggers and fix tests (Tobion)
- * feature #13378 lazy-load fragment renderers (fabpot)
- * feature #13354 Twig decoupling from Templating (fabpot)
- * feature #13264 URL manipulations as a Twig extension (fabpot)
- * feature #13289 [DependencyInjection] deprecated synchronized services (fabpot)
- * feature #13323 [Security] removed usage of the deprecated SecurityContextInterface (fabpot)
- * feature #13241 [Form] add back model_timezone and view_timezone options (xabbuh)
- * feature #13252 [Serializer] Refactoring and object_to_populate support. (dunglas)
- * feature #13255 [Serializer] Add circular reference handling to the PropertyNormalizer (dunglas)
- * feature #13259 Deprecate the translator implementation in the Validator component (stof)
- * feature #12956 [Validator] Added checkDNS option on URL validator (saro0h)
- * feature #13230 [TwigBundle] removed the Container dependency on ActionsExtension (fabpot)
- * feature #12602 Add type aliases for allowed types in OptionsResolver (henrikbjorn)
- * feature #12594 [DX] [HttpKernel] Use "context" argument when logging route in RouterListener (iltar)
- * feature #12653 [Filesystem] Keep executable permission when a file is copied (joelwurtz)
- * feature #13164 [Debug] track and report deprecated classes and interfaces (nicolas-grekas)
- * feature #13157 [Security] Updated ACL generateSql.php (jaytaph)
- * feature #13105 [FrameworkBundle] added a test router for the built-in web server (fabpot)
- * feature #12092 [Serializer] Serialization groups support (dunglas)
- * feature #13031 [Serializer] Add xml_format_output context option. Close #12517. (dunglas)
- * feature #12862 [Console] Allowing the user answering key or value of the autocompleterValues (saro0h)
- * feature #12469 [Security] Added the triggering of the security.interactive_login event in SimplePreAuthenticationListener (saro0h)
- * feature #12896 [DX][Profiler] Show the inherited roles in the web profiler (peterrehm)
- * feature #12295 [FrameworkBundle] make GetSetMethodNormalizer available by default (dunglas)
- * feature #12666 [Hackday][Stopwatch] added __toString on StopwatchEvent (damienalexandre)
-
diff --git a/README.md b/README.md
index dca4c3cbdeec6..b9129dc317679 100644
--- a/README.md
+++ b/README.md
@@ -4,21 +4,13 @@ README
What is Symfony?
-----------------
-Symfony is a PHP 5.3 full-stack web framework. It is written with speed and
+Symfony is a PHP full-stack web framework. It is written with speed and
flexibility in mind. It allows developers to build better and easy to maintain
websites with PHP.
Symfony can be used to develop all kind of websites, from your personal blog
to high traffic ones like Dailymotion or Yahoo! Answers.
-Requirements
-------------
-
-Symfony is only supported on PHP 5.3.9 and up.
-
-Be warned that PHP 5.3.16 has a major bug in the Reflection subsystem and is
-not suitable to run Symfony (https://bugs.php.net/bug.php?id=62715)
-
Installation
------------
diff --git a/UPGRADE-2.1.md b/UPGRADE-2.1.md
deleted file mode 100644
index 5fdae5fedc7f6..0000000000000
--- a/UPGRADE-2.1.md
+++ /dev/null
@@ -1,1478 +0,0 @@
-UPGRADE FROM 2.0 to 2.1
-=======================
-
-### General
-
- * The merging strategy for `assets_base_urls` and `base_urls` has changed.
-
- Unlike most configuration blocks, successive values for `assets_base_urls`
- will overwrite each other instead of being merged. This behavior was chosen
- because developers will typically define base URL's for each environment.
- Given that most projects tend to inherit configurations (e.g.
- `config_test.yml` imports `config_dev.yml`) and/or share a common base
- configuration (i.e. `config.yml`), merging could yield a set of base URL's
- for multiple environments.
-
- * The priorities for the built-in listeners have changed.
-
- ```
- 2.0 2.1
- security.firewall kernel.request 64 8
- locale listener kernel.request 0 16
- router listener early_request 255 n/a
- request 0 32
- ```
-
-### Doctrine
-
- * The DoctrineBundle is moved from the Symfony repository to the Doctrine repository.
- Therefore you should change the namespace of this bundle in your AppKernel.php:
-
- Before: `new Symfony\Bundle\DoctrineBundle\DoctrineBundle()`
-
- After: `new Doctrine\Bundle\DoctrineBundle\DoctrineBundle()`
-
-### HttpFoundation
-
- * Locale management was moved from the Session class to the Request class.
-
- ##### Configuring the default locale
-
- Before:
-
- ```yaml
- framework:
- session:
- default_locale: fr
- ```
-
- After:
-
- ```yaml
- framework:
- default_locale: fr
- ```
-
- ##### Retrieving the locale from a Twig template
-
- Before: `{{ app.request.session.locale }}` or `{{ app.session.locale }}`
-
- After: `{{ app.request.locale }}`
-
- ##### Retrieving the locale from a PHP template
-
- Before: `$view['session']->getLocale()`
-
- After: `$view['request']->getLocale()`
-
- ##### Retrieving the locale from PHP code
-
- Before: `$session->getLocale()`
-
- After: `$request->getLocale()`
-
- ##### Simulate old behavior
-
- You can simulate that the locale for the user is still stored in the session by
- registering a listener that looks like the following if the parameter which
- handles the locale value in the request is `_locale`:
-
- ```php
- namespace XXX;
-
- use Symfony\Component\HttpKernel\Event\GetResponseEvent;
- use Symfony\Component\HttpKernel\KernelEvents;
- use Symfony\Component\EventDispatcher\EventSubscriberInterface;
-
- class LocaleListener implements EventSubscriberInterface
- {
- private $defaultLocale;
-
- public function __construct($defaultLocale = 'en')
- {
- $this->defaultLocale = $defaultLocale;
- }
-
- public function onKernelRequest(GetResponseEvent $event)
- {
- $request = $event->getRequest();
- if (!$request->hasPreviousSession()) {
- return;
- }
-
- if ($locale = $request->attributes->get('_locale')) {
- $request->getSession()->set('_locale', $locale);
- } else {
- $request->setLocale($request->getSession()->get('_locale', $this->defaultLocale));
- }
- }
-
- static public function getSubscribedEvents()
- {
- return array(
- // must be registered before the default Locale listener
- KernelEvents::REQUEST => array(array('onKernelRequest', 17)),
- );
- }
- }
- ```
-
- * The methods `getPathInfo()`, `getBaseUrl()` and `getBasePath()` of
- a `Request` now all return a raw value (vs a urldecoded value before). Any call
- to one of these methods must be checked and wrapped in a `rawurldecode()` if
- needed.
-
-### Security
-
- * `Symfony\Component\Security\Core\User\UserInterface::equals()` has moved to
- `Symfony\Component\Security\Core\User\EquatableInterface::isEqualTo()`.
-
- You must rename the `equals()` method in your implementation of the `User`
- class to `isEqualTo()` and implement `EquatableInterface`. Apart from that,
- no other changes are required.
-
- Alternatively, you may use the default implementation provided by
- `AbstractToken::hasUserChanged()` if you have no need of custom comparison
- logic. In this case, do not implement `EquatableInterface` and remove your
- comparison method.
-
- Before:
-
- ```php
- class User implements UserInterface
- {
- // ...
- public function equals(UserInterface $user) { /* ... */ }
- // ...
- }
- ```
-
- After:
-
- ```php
- class User implements UserInterface, EquatableInterface
- {
- // ...
- public function isEqualTo(UserInterface $user) { /* ... */ }
- // ...
- }
- ```
-
- * The custom factories for the firewall configuration are now
- registered during the build method of bundles instead of being registered
- by the end-user. This means that you will need to remove the 'factories'
- keys in your security configuration.
-
- Before:
-
- ```yaml
- security:
- factories:
- - "%kernel.root_dir%/../src/Acme/DemoBundle/Resources/config/security_factories.yml"
- ```
-
- ```yaml
- # src/Acme/DemoBundle/Resources/config/security_factories.yml
- services:
- security.authentication.factory.custom:
- class: Acme\DemoBundle\DependencyInjection\Security\Factory\CustomFactory
- tags:
- - { name: security.listener.factory }
- ```
-
- After:
-
- ```php
- namespace Acme\DemoBundle;
-
- use Symfony\Component\HttpKernel\Bundle\Bundle;
- use Symfony\Component\DependencyInjection\ContainerBuilder;
- use Acme\DemoBundle\DependencyInjection\Security\Factory\CustomFactory;
-
- class AcmeDemoBundle extends Bundle
- {
- public function build(ContainerBuilder $container)
- {
- parent::build($container);
-
- $extension = $container->getExtension('security');
- $extension->addSecurityListenerFactory(new CustomFactory());
- }
- }
- ```
-
- * The Firewall listener is now registered after the Router listener. This
- means that specific Firewall URLs (like /login_check and /logout) must now
- have proper routes defined in your routing configuration. Also, if you have
- a custom 404 error page, make sure that you do not use any security related
- features such as `is_granted` on it.
-
- * The user provider configuration has been refactored. The configuration
- for the chain provider and the memory provider has been changed:
-
- Before:
-
- ```yaml
- security:
- providers:
- my_chain_provider:
- providers: [my_memory_provider, my_doctrine_provider]
- my_memory_provider:
- users:
- toto: { password: foobar, roles: [ROLE_USER] }
- foo: { password: bar, roles: [ROLE_USER, ROLE_ADMIN] }
- ```
-
- After:
-
- ```yaml
- security:
- providers:
- my_chain_provider:
- chain:
- providers: [my_memory_provider, my_doctrine_provider]
- my_memory_provider:
- memory:
- users:
- toto: { password: foobar, roles: [ROLE_USER] }
- foo: { password: bar, roles: [ROLE_USER, ROLE_ADMIN] }
- ```
-
- * `MutableAclInterface::setParentAcl` now accepts `null`, review any
- implementations of this interface to reflect this change.
-
- * The `UserPassword` constraint has moved from the Security Bundle to the Security Component:
-
- Before:
-
- ```php
- use Symfony\Bundle\SecurityBundle\Validator\Constraint\UserPassword;
- use Symfony\Bundle\SecurityBundle\Validator\Constraint as SecurityAssert;
- ```
-
- After:
-
- ```php
- use Symfony\Component\Security\Core\Validator\Constraint\UserPassword;
- use Symfony\Component\Security\Core\Validator\Constraint as SecurityAssert;
- ```
-
-### Form
-
-#### BC Breaks in Form Types and Options
-
- * A third argument `$options` was added to the methods `buildView()` and
- `buildViewBottomUp()` in `FormTypeInterface` and `FormTypeExtensionInterface`.
- Furthermore, `buildViewBottomUp()` was renamed to `finishView()`. At last,
- all methods in these types now receive instances of `FormBuilderInterface`
- where they received instances of `FormBuilder` before. You need to change the
- method signatures in your form types and extensions as shown below.
-
- Before:
-
- ```php
- use Symfony\Component\Form\FormBuilder;
-
- public function buildForm(FormBuilder $builder, array $options)
- ```
-
- After:
-
- ```php
- use Symfony\Component\Form\FormBuilderInterface;
-
- public function buildForm(FormBuilderInterface $builder, array $options)
- ```
-
- * The method `createBuilder` was removed from `FormTypeInterface` for performance
- reasons. It is now not possible anymore to use custom implementations of
- `FormBuilderInterface` for specific form types.
-
- If you are in such a situation, you can implement a custom `ResolvedFormTypeInterface`
- where you create your own `FormBuilderInterface` implementation. You also need to
- register a custom `ResolvedFormTypeFactoryInterface` implementation under the service
- name "form.resolved_type_factory" in order to replace the default implementation.
-
- * If you previously inherited from `FieldType`, you should now inherit from
- `FormType`. You should also set the option `compound` to `false` if your field
- is not supposed to contain child fields.
-
- `FieldType` was deprecated and will be removed in Symfony 2.3.
-
- Before:
-
- ```php
- public function getParent(array $options)
- {
- return 'field';
- }
- ```
-
- After:
-
- ```php
- public function getParent()
- {
- return 'form';
- }
-
- public function setDefaultOptions(OptionsResolverInterface $resolver)
- {
- $resolver->setDefaults(array(
- 'compound' => false,
- ));
- }
- ```
-
- The changed signature of `getParent()` is explained in the next step.
- The new method `setDefaultOptions` is described in the section "Deprecations".
-
- * No options are passed to `getParent()` of `FormTypeInterface` anymore. If
- you previously dynamically inherited from `FormType` or `FieldType`, you can now
- dynamically set the "compound" option instead.
-
- Before:
-
- ```php
- public function getParent(array $options)
- {
- return $options['expanded'] ? 'form' : 'field';
- }
- ```
-
- After:
-
- ```php
- use Symfony\Component\OptionsResolver\OptionsResolverInterface;
- use Symfony\Component\OptionsResolver\Options;
-
- public function setDefaultOptions(OptionsResolverInterface $resolver)
- {
- $compound = function (Options $options) {
- return $options['expanded'];
- };
-
- $resolver->setDefaults(array(
- 'compound' => $compound,
- ));
- }
-
- public function getParent()
- {
- return 'form';
- }
- ```
-
- The new method `setDefaultOptions` is described in the section "Deprecations".
-
- * The "data_class" option now *must* be set if a form maps to an object. If
- you leave it empty, the form will expect an array, an instance of \ArrayAccess
- or a scalar value and fail with a corresponding exception.
-
- Likewise, if a form maps to an array or an instance of \ArrayAccess, the option
- *must* be left null now.
-
- Form mapped to an instance of `Person`:
-
- ```php
- use Symfony\Component\OptionsResolver\OptionsResolverInterface;
-
- public function setDefaultOptions(OptionsResolverInterface $resolver)
- {
- $resolver->setDefaults(array(
- 'data_class' => 'Acme\Demo\Person',
- ));
- }
- ```
-
- * The mapping of property paths to arrays has changed.
-
- Previously, a property path "street" mapped to both a field `$street` of
- a class (or its accessors `getStreet()` and `setStreet()`) and an index
- `['street']` of an array or an object implementing `\ArrayAccess`.
-
- Now, the property path "street" only maps to a class field (or accessors),
- while the property path "[street]" only maps to indices.
-
- If you defined property paths manually in the "property_path" option, you
- should revise them and adjust them if necessary.
-
- Before:
-
- ```php
- $builder->add('name', 'text', array(
- 'property_path' => 'address.street',
- ));
- ```
-
- After (if the address object is an array):
-
- ```php
- $builder->add('name', 'text', array(
- 'property_path' => 'address[street]',
- ));
- ```
-
- If address is an object in this case, the code given in "Before"
- works without changes.
-
- * Form and field names must now start with a letter, digit or underscore
- and only contain letters, digits, underscores, hyphens and colons.
-
- * In the collection type's template, the default name of the prototype field
- has changed from `$$name$$` to `__name__`.
-
- You can now customize the name of the prototype field by changin the
- "prototype_name" option. You are advised to prepend and append two
- underscores wherever you specify a value for the field's "prototype_name"
- option.
-
- ```php
- $builder->add('tags', 'collection', array('prototype_name' => '__proto__'));
-
- // results in the name "__proto__" in the template
- ```
-
- * The "read_only" option now renders as `readonly="readonly"`, use
- "disabled" instead for `disabled="disabled"`.
-
- * Child forms are no longer automatically validated. That means that you must
- explicitly set the `Valid` constraint in your model if you want to validate
- objects modified by child forms.
-
- If you don't want to set the `Valid` constraint, or if there is no reference
- from the data of the parent form to the data of the child form, you can
- enable BC behavior by setting the "cascade_validation" option to `true`
- on the parent form.
-
-#### BC Breaks in Themes and HTML
-
- * FormType and FieldType were merged and require you to adapt your form
- themes.
-
- The block `field_widget` and all references to it should be renamed to
- `form_widget_simple`:
-
- Before:
-
- ```jinja
- {% block url_widget %}
- {% spaceless %}
- {% set type = type|default('url') %}
- {{ block('field_widget') }}
- {% endspaceless %}
- {% endblock url_widget %}
- ```
-
- After:
-
- ```jinja
- {% block url_widget %}
- {% spaceless %}
- {% set type = type|default('url') %}
- {{ block('form_widget_simple') }}
- {% endspaceless %}
- {% endblock url_widget %}
- ```
-
- All other `field_*` blocks and references to them should be renamed to
- `form_*`. If you previously defined both a `field_*` and a `form_*`
- block, you can merge them into a single `form_*` block and check the new
- Boolean variable `compound` instead:
-
- Before:
-
- ```jinja
- {% block form_errors %}
- {% spaceless %}
- ... form code ...
- {% endspaceless %}
- {% endblock form_errors %}
-
- {% block field_errors %}
- {% spaceless %}
- ... field code ...
- {% endspaceless %}
- {% endblock field_errors %}
- ```
-
- After:
-
- ```jinja
- {% block form_errors %}
- {% spaceless %}
- {% if compound %}
- ... form code ...
- {% else %}
- ... field code ...
- {% endif %}
- {% endspaceless %}
- {% endblock form_errors %}
- ```
-
- Furthermore, the block `generic_label` was merged into `form_label`. You
- should now override `form_label` in order to customize labels.
-
- Last but not least, the block `widget_choice_options` was renamed to
- `choice_widget_options` to be consistent with the rest of the default
- theme.
-
- * The strategy for generating the `id` and `name` HTML attributes for
- checkboxes and radio buttons in a choice field has changed.
-
- Instead of appending the choice value, a generated integer is now appended
- by default. Take care if your JavaScript relies on that. If you want to
- read the actual choice value, read the `value` attribute instead.
-
- * In the choice field type's template, the `_form_is_choice_selected` method
- used to identify a selected choice has been replaced with the `selectedchoice`
- filter. Similarly, the `_form_is_choice_group` method used to check if a
- choice is grouped has been removed and can be checked with the `iterable`
- test.
-
- Before:
-
- ```jinja
- {% for choice, label in choices %}
- {% if _form_is_choice_group(label) %}
-
- {% for nestedChoice, nestedLabel in label %}
- ... options tags ...
- {% endfor %}
-
- {% else %}
-
- {{ label }}
-
- {% endif %}
- {% endfor %}
- ```
-
- After:
-
- ```jinja
- {% for label, choice in choices %}
- {% if choice is iterable %}
-
- {% for nestedChoice, nestedLabel in choice %}
- ... options tags ...
- {% endfor %}
-
- {% else %}
-
- {{ label }}
-
- {% endif %}
- {% endfor %}
- ```
-
- * Creation of default labels has been moved to the view layer. You will need
- to incorporate this logic into any custom `form_label` templates to
- accommodate those cases when the `label` option has not been explicitly
- set.
-
- ```jinja
- {% block form_label %}
- {% if label is empty %}
- {% set label = name|humanize %}
- {% endif %}
-
- {# ... #}
-
- {% endblock %}
- ````
-
- * Custom styling of individual rows of a collection form has been removed for
- performance reasons. Instead, all rows now have the same block name, where
- the word "entry" replaces the previous occurrence of the row index.
-
- Before:
-
- ```jinja
- {% block _author_tags_0_label %}
- {# ... #}
- {% endblock %}
-
- {% block _author_tags_1_label %}
- {# ... #}
- {% endblock %}
- ```
-
- After:
-
- ```jinja
- {% block _author_tags_entry_label %}
- {# ... #}
- {% endblock %}
- ```
-
- * The method `renderBlock()` of the helper for the PHP Templating component was
- renamed to `block()`. Its first argument is now expected to be a `FormView`
- instance.
-
- Before:
-
- ```php
- renderBlock('widget_attributes') ?>
- ```
-
- After:
-
- ```php
- block($form, 'widget_attributes') ?>
- ```
-
-#### Other BC Breaks
-
- * The order of the first two arguments of the methods `createNamed` and
- `createNamedBuilder` in `FormFactoryInterface` was reversed to be
- consistent with the rest of the component. You should scan your code
- for occurrences of these methods and reverse the parameters.
-
- Before:
-
- ```php
- $form = $factory->createNamed('text', 'firstName');
- ```
-
- After:
-
- ```php
- $form = $factory->createNamed('firstName', 'text');
- ```
-
- * The implementation of `ChoiceList` was changed heavily. As a result,
- `ArrayChoiceList` was replaced. If you have custom classes that extend
- this class, you must now extend `SimpleChoiceList` and pass choices
- to the parent constructor.
-
- Before:
-
- ```php
- class MyChoiceList extends ArrayChoiceList
- {
- protected function load()
- {
- parent::load();
-
- // load choices
-
- $this->choices = $choices;
- }
- }
- ```
-
- After:
-
- ```php
- class MyChoiceList extends SimpleChoiceList
- {
- public function __construct()
- {
- // load choices
-
- parent::__construct($choices);
- }
- }
- ```
-
- If you need to load the choices lazily -- that is, as soon as they are
- accessed for the first time -- you can extend `LazyChoiceList` instead
- and load the choices by overriding `loadChoiceList()`.
-
- ```php
- class MyChoiceList extends LazyChoiceList
- {
- protected function loadChoiceList()
- {
- // load choices
-
- return new SimpleChoiceList($choices);
- }
- }
- ```
-
- `PaddedChoiceList`, `MonthChoiceList` and `TimezoneChoiceList` were removed.
- Their functionality was merged into `DateType`, `TimeType` and `TimezoneType`.
-
- `EntityChoiceList` was adapted. The methods `getEntities()`,
- `getEntitiesByKeys()`, `getIdentifier()` and `getIdentifierValues()` were
- removed or made private. Instead of the first two, you can now use
- `getChoices()` and `getChoicesByValues()`. For the latter two, no
- replacement exists.
-
- * HTML attributes are now passed in the `label_attr` variable for the `form_label` function.
-
- Before:
-
- ```jinja
- {{ form_label(form.name, 'Your Name', { 'attr': {'class': 'foo'} }) }}
- ```
-
- After:
-
- ```jinja
- {{ form_label(form.name, 'Your Name', { 'label_attr': {'class': 'foo'} }) }}
- ```
-
- * `EntitiesToArrayTransformer` and `EntityToIdTransformer` were removed.
- The former was replaced by `CollectionToArrayTransformer` in combination
- with `EntityChoiceList`, the latter is not required in the core anymore.
-
- * The following transformers were renamed:
-
- * `ArrayToBooleanChoicesTransformer` to `ChoicesToBooleanArrayTransformer`
- * `ScalarToBooleanChoicesTransformer` to `ChoiceToBooleanArrayTransformer`
- * `ArrayToChoicesTransformer` to `ChoicesToValuesTransformer`
- * `ScalarToChoiceTransformer` to `ChoiceToValueTransformer`
-
- to be consistent with the naming in `ChoiceListInterface`.
-
- * `FormUtil::toArrayKey()` and `FormUtil::toArrayKeys()` were removed.
- They were merged into ChoiceList and have no public equivalent anymore.
-
- * The `add()`, `remove()`, `setParent()`, `bind()` and `setData()` methods in
- the Form class now throw an exception if the form is already bound.
-
- If you used these methods on bound forms, you should consider moving your
- logic to an event listener that observes `FormEvents::PRE_BIND` or
- `FormEvents::BIND`.
-
-#### Deprecations
-
- * The following methods of `FormTypeInterface` and `FormTypeExtensionInterface`
- are deprecated and will be removed in Symfony 2.3:
-
- * `getDefaultOptions`
- * `getAllowedOptionValues`
-
- You should use the newly added `setDefaultOptions` instead, which gives you
- access to the OptionsResolverInterface instance and with that a lot more power.
-
- Before:
-
- ```php
- public function getDefaultOptions(array $options)
- {
- return array(
- 'gender' => 'male',
- );
- }
-
- public function getAllowedOptionValues(array $options)
- {
- return array(
- 'gender' => array('male', 'female'),
- );
- }
- ```
-
- After:
-
- ```php
- public function setDefaultOptions(OptionsResolverInterface $resolver)
- {
- $resolver->setDefaults(array(
- 'gender' => 'male',
- ));
-
- $resolver->setAllowedValues(array(
- 'gender' => array('male', 'female'),
- ));
- }
- ```
-
- You can specify options that depend on other options using closures.
-
- Before:
-
- ```php
- public function getDefaultOptions(array $options)
- {
- $defaultOptions = array();
-
- if ($options['multiple']) {
- $defaultOptions['empty_data'] = array();
- }
-
- return $defaultOptions;
- }
- ```
-
- After:
-
- ```php
- public function setDefaultOptions(OptionsResolverInterface $resolver)
- {
- $resolver->setDefaults(array(
- 'empty_data' => function (Options $options, $value) {
- return $options['multiple'] ? array() : $value;
- }
- ));
- }
- ```
-
- The second argument `$value` contains the current default value and
- does not have to be specified if not needed.
-
- * The following methods in `FormBuilder` were deprecated and have a new
- equivalent:
-
- * `prependClientTransformer`: `addViewTransformer`, with `true` as second argument
- * `appendClientTransformer`: `addViewTransformer`
- * `getClientTransformers`: `getViewTransformers`
- * `resetClientTransformers`: `resetViewTransformers`
- * `prependNormTransformer`: `addModelTransformer`
- * `appendNormTransformer`: `addModelTransformer`, with `true` as second argument
- * `getNormTransformers`: `getModelTransformers`
- * `resetNormTransformers`: `resetModelTransformers`
-
- The deprecated methods will be removed in Symfony 2.3. You are advised to
- update your application.
-
- Before:
-
- ```php
- $builder->appendClientTransformer(new MyTransformer());
- ```
-
- After:
-
- ```php
- $builder->addViewTransformer(new MyTransformer());
- ```
-
- * The following events were deprecated and have a new equivalent:
-
- * `FormEvents::SET_DATA`: `FormEvents::PRE_SET_DATA`
- * `FormEvents::BIND_CLIENT_DATA`: `FormEvents::PRE_BIND`
- * `FormEvents::BIND_NORM_DATA`: `FormEvents::BIND`
-
- The deprecated events will be removed in Symfony 2.3.
-
- Furthermore, the event classes `DataEvent` and `FilterDataEvent` were
- deprecated and replaced by the generic `FormEvent`. You are advised to
- code your listeners against the new event now. The deprecated events will
- be removed in Symfony 2.3.
-
- Before:
-
- ```php
- $builder->addListener(FormEvents::BIND_CLIENT_DATA, function (FilterDataEvent $event) {
- // ...
- });
- ```
-
- After:
-
- ```php
- $builder->addListener(FormEvents::PRE_BIND, function (FormEvent $event) {
- // ...
- });
- ```
-
- * The interface `FormValidatorInterface` was deprecated and will be removed
- in Symfony 2.3.
-
- If you implemented custom validators using this interface, you can
- substitute them by event listeners listening to the `FormEvents::POST_BIND`
- (or any other of the `*BIND` events). In case you used the CallbackValidator
- class, you should now pass the callback directly to `addEventListener`.
-
- * The method `guessMinLength()` of `FormTypeGuesserInterface` was deprecated
- and will be removed in Symfony 2.3. You should use the new method
- `guessPattern()` instead which may return any regular expression that
- is inserted in the HTML5 attribute `pattern`.
-
- Before:
-
- ```php
- public function guessMinLength($class, $property)
- {
- if (/* condition */) {
- return new ValueGuess($minLength, Guess::LOW_CONFIDENCE);
- }
- }
- ```
-
- After:
-
- ```php
- public function guessPattern($class, $property)
- {
- if (/* condition */) {
- return new ValueGuess('.{'.$minLength.',}', Guess::LOW_CONFIDENCE);
- }
- }
- ```
-
- * Setting the option "property_path" to `false` was deprecated and will be unsupported
- as of Symfony 2.3.
-
- You should use the new option "mapped" instead in order to set that you don't want
- a field to be mapped to its parent's data.
-
- Before:
-
- ```php
- $builder->add('termsAccepted', 'checkbox', array(
- 'property_path' => false,
- ));
- ```
-
- After:
-
- ```php
- $builder->add('termsAccepted', 'checkbox', array(
- 'mapped' => false,
- ));
- ```
-
- * The following methods in `Form` were deprecated and will be removed in
- Symfony 2.3:
-
- * `getTypes`
- * `getErrorBubbling`
- * `getNormTransformers`
- * `getClientTransformers`
- * `getAttribute`
- * `hasAttribute`
- * `getClientData`
- * `getChildren`
- * `hasChildren`
- * `bindRequest`
-
- Before:
-
- ```php
- $form->getErrorBubbling()
- ```
-
- After:
-
- ```php
- $form->getConfig()->getErrorBubbling();
- ```
-
- The method `getClientData` has a new equivalent that is named `getViewData`.
- You can access all other methods on the `FormConfigInterface` object instead.
-
- Instead of `getChildren` and `hasChildren`, you should now use `all` and
- `count`.
-
- Before:
-
- ```php
- if ($form->hasChildren()) {
- ```
-
- After:
-
- ```php
- if (count($form) > 0) {
- ```
-
- Instead of `bindRequest`, you should now simply call `bind`:
-
- Before:
-
- ```php
- $form->bindRequest($request);
- ```
-
- After:
-
- ```php
- $form->bind($request);
- ```
-
- * The option "validation_constraint" was deprecated and will be removed
- in Symfony 2.3. You should use the option "constraints" instead,
- where you can pass one or more constraints for a form.
-
- Before:
-
- ```php
- $builder->add('name', 'text', array(
- 'validation_constraint' => new NotBlank(),
- ));
- ```
-
- After:
-
- ```php
- $builder->add('name', 'text', array(
- 'constraints' => new NotBlank(),
- ));
- ```
-
- Unlike previously, you can also pass a list of constraints now:
-
- ```php
- $builder->add('name', 'text', array(
- 'constraints' => array(
- new NotBlank(),
- new MinLength(3),
- ),
- ));
- ```
-
- Be aware that constraints will now only be validated if they belong
- to the validated group! So if you validate a form in group "Custom"
- and previously did:
-
- ```php
- $builder->add('name', 'text', array(
- 'validation_constraint' => new NotBlank(),
- ));
- ```
-
- Then you need to add the constraint to the group "Custom" now:
-
- ```php
- $builder->add('name', 'text', array(
- 'constraints' => new NotBlank(array('groups' => 'Custom')),
- ));
- ```
-
- * The options "data_timezone" and "user_timezone" in `DateType`,
- `DateTimeType` and `TimeType` were deprecated and will be removed in
- Symfony 2.3. They were renamed to "model_timezone" and "view_timezone".
-
- Before:
-
- ```php
- $builder->add('scheduledFor', 'date', array(
- 'data_timezone' => 'UTC',
- 'user_timezone' => 'America/New_York',
- ));
- ```
-
- After:
-
- ```php
- $builder->add('scheduledFor', 'date', array(
- 'model_timezone' => 'UTC',
- 'view_timezone' => 'America/New_York',
- ));
- ```
-
- * The methods `addType`, `hasType` and `getType` in `FormFactory` are deprecated
- and will be removed in Symfony 2.3. You should use the methods with the same
- name on the `FormRegistry` instead.
-
- Before:
-
- ```php
- $this->get('form.factory')->addType(new MyFormType());
- ```
-
- After:
-
- ```php
- $registry = $this->get('form.registry');
-
- $registry->addType($registry->resolveType(new MyFormType()));
- ```
-
- * The following methods in class `FormView` were deprecated and will be
- removed in Symfony 2.3:
-
- * `set`
- * `has`
- * `get`
- * `all`
- * `getVars`
- * `addChild`
- * `getChild`
- * `getChildren`
- * `removeChild`
- * `hasChild`
- * `hasChildren`
- * `getParent`
- * `hasParent`
- * `setParent`
-
- You should access the public properties `vars`, `children` and `parent`
- instead.
-
- Before:
-
- ```php
- $view->set('help', 'A text longer than six characters');
- $view->set('error_class', 'max_length_error');
- ```
-
- After:
-
- ```php
- $view->vars = array_replace($view->vars, array(
- 'help' => 'A text longer than six characters',
- 'error_class' => 'max_length_error',
- ));
- ```
-
- Before:
-
- ```php
- echo $view->get('error_class');
- ```
-
- After:
-
- ```php
- echo $view->vars['error_class'];
- ```
-
- Before:
-
- ```php
- if ($view->hasChildren()) { ...
- ```
-
- After:
-
- ```php
- if (count($view->children)) { ...
- ```
-
-### Validator
-
- * The methods `setMessage()`, `getMessageTemplate()` and
- `getMessageParameters()` in the `ConstraintValidator` class were deprecated and will
- be removed in Symfony 2.3.
-
- If you have implemented custom validators, you should use the
- `addViolation()` method on the `ExecutionContext` object instead.
-
- Before:
-
- ```php
- public function isValid($value, Constraint $constraint)
- {
- // ...
- if (!$valid) {
- $this->setMessage($constraint->message, array(
- '{{ value }}' => $value,
- ));
-
- return false;
- }
- }
- ```
-
- After:
-
- ```php
- public function isValid($value, Constraint $constraint)
- {
- // ...
- if (!$valid) {
- $this->context->addViolation($constraint->message, array(
- '{{ value }}' => $value,
- ));
-
- return false;
- }
- }
- ```
-
- * The method `setPropertyPath()` in the ExecutionContext class
- was removed.
-
- You should use the `addViolationAtSubPath()` method on the
- `ExecutionContext` object instead.
-
- Before:
-
- ```php
- public function isPropertyValid(ExecutionContext $context)
- {
- // ...
- $propertyPath = $context->getPropertyPath().'.property';
- $context->setPropertyPath($propertyPath);
- $context->addViolation('Error Message', array(), null);
- }
- ```
-
- After:
-
- ```php
- public function isPropertyValid(ExecutionContext $context)
- {
- // ...
- $context->addViolationAtSubPath('property', 'Error Message', array(), null);
-
- }
- ```
-
- * The method `isValid` of `ConstraintValidatorInterface` was renamed to
- `validate` and its return value was dropped.
-
- `ConstraintValidator` still contains the deprecated `isValid` method and
- forwards `validate` calls to `isValid` by default. This BC layer will be
- removed in Symfony 2.3. You are advised to rename your methods. You should
- also remove the return values, which have never been used by the framework.
-
- Before:
-
- ```php
- public function isValid($value, Constraint $constraint)
- {
- // ...
- if (!$valid) {
- $this->context->addViolation($constraint->message, array(
- '{{ value }}' => $value,
- ));
-
- return false;
- }
- }
- ```
-
- After:
-
- ```php
- public function validate($value, Constraint $constraint)
- {
- // ...
- if (!$valid) {
- $this->context->addViolation($constraint->message, array(
- '{{ value }}' => $value,
- ));
-
- return;
- }
- }
- ```
-
- * Core translation messages changed. A dot is added at the end of each message.
- Overwritten core translations need to be fixed.
-
- * Collections (arrays or instances of `\Traversable`) in properties
- annotated with `Valid` are not traversed recursively by default anymore.
-
- This means that if a collection contains an entry which is again a
- collection, the inner collection won't be traversed anymore as it
- happened before. You can set the BC behavior by setting the new property
- `deep` of `Valid` to `true`.
-
- Before:
-
- ```php
- /** @Assert\Valid */
- private $recursiveCollection;
- ```
-
- After:
-
- ```php
- /** @Assert\Valid(deep = true) */
- private $recursiveCollection;
- ```
-
- * The `Size`, `Min` and `Max` constraints were deprecated and will be removed in
- Symfony 2.3. You should use the new constraint `Range` instead.
-
- Before:
-
- ```php
- /** @Assert\Size(min = 2, max = 16) */
- private $numberOfCpus;
- ```
-
- After:
-
- ```php
- /** @Assert\Range(min = 2, max = 16) */
- private $numberOfCpus;
- ```
-
- Before:
-
- ```php
- /** @Assert\Min(2) */
- private $numberOfCpus;
- ```
-
- After:
-
- ```php
- /** @Assert\Range(min = 2) */
- private $numberOfCpus;
- ```
-
- * The `MinLength` and `MaxLength` constraints were deprecated and will be
- removed in Symfony 2.3. You should use the new constraint `Length` instead.
-
- Before:
-
- ```php
- /** @Assert\MinLength(8) */
- private $password;
- ```
-
- After:
-
- ```php
- /** @Assert\Length(min = 8) */
- private $password;
- ```
-
- * The classes `ValidatorContext` and `ValidatorFactory` were deprecated and
- will be removed in Symfony 2.3. You should use the new entry point
- `Validation` instead.
-
- Before:
-
- ```php
- $validator = ValidatorFactory::buildDefault(array('path/to/mapping.xml'))
- ->getValidator();
- ```
-
- After:
-
- ```php
- $validator = Validation::createValidatorBuilder()
- ->addXmlMapping('path/to/mapping.xml')
- ->getValidator();
- ```
-
-### Session
-
- * The namespace of the Session class changed from `Symfony\Component\HttpFoundation\Session`
- to `Symfony\Component\HttpFoundation\Session\Session`.
-
- * Using `get` to retrieve flash messages now returns an array.
-
- ##### Retrieving the flash messages from a Twig template
-
- Before:
-
- ```jinja
- {% if app.session.hasFlash('notice') %}
-
- {{ app.session.getFlash('notice') }}
-
- {% endif %}
- ```
- After:
-
- ```jinja
- {% for flashMessage in app.session.flashbag.get('notice') %}
-
- {{ flashMessage }}
-
- {% endfor %}
- ```
-
- You can process all flash messages in a single loop with:
-
- ```jinja
- {% for type, flashMessages in app.session.flashbag.all() %}
- {% for flashMessage in flashMessages %}
-
- {{ flashMessage }}
-
- {% endfor %}
- {% endfor %}
- ```
-
- * Session handler drivers should implement `\SessionHandlerInterface` or extend from
- `Symfony\Component\HttpFoundation\Session\Storage\Handler\NativeHandlerInterface` base class and renamed
- to `Handler\FooSessionHandler`. E.g. `PdoSessionStorage` becomes `Handler\PdoSessionHandler`.
-
- * Refactor code using `$session->*flash*()` methods to use `$session->getFlashBag()->*()`.
-
-### Serializer
-
- * The key names created by the `GetSetMethodNormalizer` have changed from
- all lowercased to camelCased (e.g. `mypropertyvalue` to `myPropertyValue`).
-
- * The `item` element is now converted to an array when deserializing XML.
-
- ```xml
-
-
- Codestin Search App Codestin Search App
-
- ```
-
- Before:
-
- Array()
-
- After:
-
- Array(
- [item] => Array(
- [0] => Array(
- [title] => title1
- )
- [1] => Array(
- [title] => title2
- )
- )
- )
-
-### Routing
-
- * The UrlMatcher urldecodes the route parameters only once, they were
- decoded twice before. Note that the `urldecode()` calls have been changed for a
- single `rawurldecode()` in order to support `+` for input paths.
-
- * Two new parameters have been added to the DIC: `router.request_context.host`
- and `router.request_context.scheme`. You can customize them for your
- functional tests or for generating urls with the right host and scheme
- when your are in the cli context.
-
-### FrameworkBundle
-
- * session options: lifetime, path, domain, secure, httponly were deprecated.
- Prefixed versions should now be used instead: cookie_lifetime, cookie_path, cookie_domain, cookie_secure, cookie_httponly
-
- Before:
-
- ```yaml
- framework:
- session:
- lifetime: 3600
- path: \
- domain: example.com
- secure: true
- httponly: true
- ```
-
- After:
-
- ```yaml
- framework:
- session:
- cookie_lifetime: 3600
- cookie_path: \
- cookie_domain: example.com
- cookie_secure: true
- cookie_httponly: true
- ```
-
-Added `handler_id`, defaults to `session.handler.native_file`.
-
- ```yaml
- framework:
- session:
- storage_id: session.storage.native
- handler_id: session.handler.native_file
- ```
-
-To use mock session storage use the following. `handler_id` is irrelevant in this context.
-
- ```yaml
- framework:
- session:
- storage_id: session.storage.mock_file
- ```
-
-### WebProfilerBundle
-
- * You must clear old profiles after upgrading to 2.1. If you are using a
- database then you will need to remove the table.
diff --git a/UPGRADE-2.2.md b/UPGRADE-2.2.md
deleted file mode 100644
index ff3dc0a1860e0..0000000000000
--- a/UPGRADE-2.2.md
+++ /dev/null
@@ -1,668 +0,0 @@
-UPGRADE FROM 2.1 to 2.2
-=======================
-
-### TwigBridge
-
- * The `render` tag signature and arguments changed.
-
- Before:
-
- ```jinja
- {% render 'BlogBundle:Post:list' with { 'limit': 2 }, { 'alt': 'BlogBundle:Post:error' } %}
- ```
-
- After:
-
- ```jinja
- {% render controller('BlogBundle:Post:list', { 'limit': 2 }), { 'alt': 'BlogBundle:Post:error' } %}
- {# Or: #}
- {{ render(controller('BlogBundle:Post:list', { 'limit': 2 }), { 'alt': 'BlogBundle:Post:error'}) }}
- ```
-
- Note: The function is the preferred way.
-
-#### Deprecations
-
- * The `standalone` option is deprecated and will be replaced with the `strategy` option in 2.3.
- * The values `true`, `false`, `js` for the `standalone` option were deprecated and replaced respectively with the `esi`, `inline`, `hinclude` in 2.3.
-
-
- Before:
-
- ```jinja
- {% render 'BlogBundle:Post:list' with { 'limit': 2 }, {'standalone': true} %}
- {% render 'BlogBundle:Post:list' with { 'limit': 2 }, {'standalone': false} %}
- {% render 'BlogBundle:Post:list' with { 'limit': 2 }, {'standalone': 'js'} %}
- ```
-
- After:
-
- ```jinja
- {{ render(controller('BlogBundle:Post:list', { 'limit': 2 }), { 'strategy': 'esi'}) }}
- {{ render(controller('BlogBundle:Post:list', { 'limit': 2 }), { 'strategy': 'inline'}) }}
- {{ render(controller('BlogBundle:Post:list', { 'limit': 2 }), { 'strategy': 'hinclude'}) }}
- ```
-
-
-### HttpFoundation
-
- * The MongoDbSessionHandler default field names and timestamp type have changed.
-
- The `sess_` prefix was removed from default field names. The session ID is
- now stored in the `_id` field by default. The session date is now stored as a
- `MongoDate` instead of `MongoTimestamp`, which also makes it possible to use
- TTL collections in MongoDB 2.2+ instead of relying on the `gc()` method.
-
- * The Stopwatch functionality was moved from HttpKernel\Debug to its own component
-
- * The _method request parameter support has been disabled by default (call
- Request::enableHttpMethodParameterOverride() to enable it).
-
-#### Deprecations
-
- * The `Request::splitHttpAcceptHeader()` is deprecated and will be removed in 2.3.
-
- You should now use the `AcceptHeader` class which give you fluent methods to
- parse request accept-* headers. Some examples:
-
- ```php
- $accept = AcceptHeader::fromString($request->headers->get('Accept'));
- if ($accept->has('text/html') {
- $item = $accept->get('html');
- $charset = $item->getAttribute('charset', 'utf-8');
- $quality = $item->getQuality();
- }
-
- // accepts items are sorted by descending quality
- $accepts = AcceptHeader::fromString($request->headers->get('Accept'))->all();
-
- ```
-
-### Form
-
- * The PasswordType is now not trimmed by default.
-
- * The class FormException is now an interface. The old class is still available
- under the name Symfony\Component\Form\Exception\Exception, but will probably
- be removed before 2.2. If you created FormException instances manually,
- you are now advised to create any of the other exceptions in the
- Symfony\Component\Form\Exception namespace or to create custom exception
- classes for your purpose.
-
- * Translating validation errors is now optional. You can still do so
- manually if you like, or you can simplify your templates to simply output
- the already translated message.
-
- Before:
-
- ```jinja
- {{
- error.messagePluralization is null
- ? error.messageTemplate|trans(error.messageParameters, 'validators')
- : error.messageTemplate|transchoice(error.messagePluralization, error.messageParameters, 'validators')
- }}
- ```
-
- After:
-
- ```jinja
- {{ error.message }}
- ```
-
- * FormType, ModelType and PropertyPathMapper now have constructors. If you
- extended these classes, you should call the parent constructor now.
- Note that you are not recommended to extend FormType nor ModelType. You should
- extend AbstractType instead and use the Form component's own inheritance
- mechanism (`AbstractType::getParent()`).
-
- Before:
-
- ```php
- use Symfony\Component\Form\Extensions\Core\DataMapper\PropertyPathMapper;
-
- class CustomMapper extends PropertyPathMapper
- {
- public function __construct()
- {
- // ...
- }
-
- // ...
- }
- ```
-
- After:
-
- ```php
- use Symfony\Component\Form\Extensions\Core\DataMapper\PropertyPathMapper;
-
- class CustomMapper extends PropertyPathMapper
- {
- public function __construct()
- {
- parent::__construct();
-
- // ...
- }
-
- // ...
- }
- ```
-
-#### Deprecations
-
- * The methods `getParent()`, `setParent()` and `hasParent()` in
- `FormBuilderInterface` were deprecated and will be removed in Symfony 2.3.
- You should not rely on these methods in your form type because the parent
- of a form can change after building it.
-
- * The class PropertyPath and related classes were deprecated and moved to a
- dedicated component PropertyAccess. If you used any of these classes or
- interfaces, you should adapt the namespaces now. During the move,
- InvalidPropertyException was renamed to NoSuchPropertyException.
-
- Before:
-
- ```php
- use Symfony\Component\Form\Util\PropertyPath;
- use Symfony\Component\Form\Util\PropertyPathBuilder;
- use Symfony\Component\Form\Util\PropertyPathInterface;
- use Symfony\Component\Form\Util\PropertyPathIterator;
- use Symfony\Component\Form\Util\PropertyPathIteratorInterface;
- use Symfony\Component\Form\Exception\InvalidPropertyException;
- use Symfony\Component\Form\Exception\InvalidPropertyPathException;
- use Symfony\Component\Form\Exception\PropertyAccessDeniedException;
- ```
-
- After:
-
- ```php
- use Symfony\Component\PropertyAccess\PropertyPath;
- use Symfony\Component\PropertyAccess\PropertyPathBuilder;
- use Symfony\Component\PropertyAccess\PropertyPathInterface;
- use Symfony\Component\PropertyAccess\PropertyPathIterator;
- use Symfony\Component\PropertyAccess\PropertyPathIteratorInterface;
- use Symfony\Component\PropertyAccess\Exception\NoSuchPropertyException;
- use Symfony\Component\PropertyAccess\Exception\InvalidPropertyPathException;
- use Symfony\Component\PropertyAccess\Exception\PropertyAccessDeniedException;
- ```
-
- Also, `FormUtil::singularify()` was split away into a class StringUtil
- in the new component.
-
- Before:
-
- ```php
- use Symfony\Component\Form\Util\FormUtil;
-
- $singular = FormUtil::singularify($plural);
- ```
-
- After:
-
- ```php
- use Symfony\Component\PropertyAccess\StringUtil;
-
- $singular = StringUtil::singularify($plural);
- ```
-
- The methods `getValue()` and `setValue()` were moved to a new class
- PropertyAccessor.
-
- Before:
-
- ```php
- use Symfony\Component\Form\Util\PropertyPath;
-
- $propertyPath = new PropertyPath('some.path');
-
- $value = $propertyPath->getValue($object);
- $propertyPath->setValue($object, 'new value');
- ```
-
- After (alternative 1):
-
- ```php
- use Symfony\Component\PropertyAccess\PropertyAccess;
-
- $propertyAccessor = PropertyAccess::getPropertyAccessor();
-
- $value = $propertyAccessor->getValue($object, 'some.path');
- $propertyAccessor->setValue($object, 'some.path', 'new value');
- ```
-
- After (alternative 2):
-
- ```php
- use Symfony\Component\PropertyAccess\PropertyAccess;
- use Symfony\Component\PropertyAccess\PropertyPath;
-
- $propertyAccessor = PropertyAccess::getPropertyAccessor();
- $propertyPath = new PropertyPath('some.path');
-
- $value = $propertyAccessor->getValue($object, $propertyPath);
- $propertyAccessor->setValue($object, $propertyPath, 'new value');
- ```
-
-### Routing
-
- * RouteCollection does not behave like a tree structure anymore but as a flat
- array of Routes. So when using PHP to build the RouteCollection, you must
- make sure to add routes to the sub-collection before adding it to the parent
- collection (this is not relevant when using YAML or XML for Route definitions).
-
- Before:
-
- ```php
- $rootCollection = new RouteCollection();
- $subCollection = new RouteCollection();
- $rootCollection->addCollection($subCollection);
- $subCollection->add('foo', new Route('/foo'));
- ```
-
- After:
-
- ```php
- $rootCollection = new RouteCollection();
- $subCollection = new RouteCollection();
- $subCollection->add('foo', new Route('/foo'));
- $rootCollection->addCollection($subCollection);
- ```
-
- Also one must call `addCollection` from the bottom to the top hierarchy.
- So the correct sequence is the following (and not the reverse):
-
- ```php
- $childCollection->addCollection($grandchildCollection);
- $rootCollection->addCollection($childCollection);
- ```
-
- * The methods `RouteCollection::getParent()` and `RouteCollection::getRoot()`
- have been deprecated and will be removed in Symfony 2.3.
- * Misusing the `RouteCollection::addPrefix` method to add defaults, requirements
- or options without adding a prefix is not supported anymore. So if you called `addPrefix`
- with an empty prefix or `/` only (both have no relevance), like
- `addPrefix('', $defaultsArray, $requirementsArray, $optionsArray)`
- you need to use the new dedicated methods `addDefaults($defaultsArray)`,
- `addRequirements($requirementsArray)` or `addOptions($optionsArray)` instead.
- * The `$options` parameter to `RouteCollection::addPrefix()` has been deprecated
- because adding options has nothing to do with adding a path prefix. If you want to add options
- to all child routes of a RouteCollection, you can use `addOptions()`.
- * The method `RouteCollection::getPrefix()` has been deprecated
- because it suggested that all routes in the collection would have this prefix, which is
- not necessarily true. On top of that, since there is no tree structure anymore, this method
- is also useless.
- * `RouteCollection::addCollection(RouteCollection $collection)` should now only be
- used with a single parameter. The other params `$prefix`, `$default`, `$requirements` and `$options`
- will still work, but have been deprecated. The `addPrefix` method should be used for this
- use-case instead.
- Before: `$parentCollection->addCollection($collection, '/prefix', array(...), array(...))`
- After:
- ```php
- $collection->addPrefix('/prefix', array(...), array(...));
- $parentCollection->addCollection($collection);
- ```
-
-### Validator
-
- * Interfaces were created for the classes `ConstraintViolation`,
- `ConstraintViolationList`, `GlobalExecutionContext` and `ExecutionContext`.
- If you type hinted against any of these classes, you are recommended to
- type hint against their interfaces now.
-
- Before:
-
- ```php
- use Symfony\Component\Validator\ExecutionContext;
-
- public function validateCustomLogic(ExecutionContext $context)
- ```
-
- After:
-
- ```php
- use Symfony\Component\Validator\ExecutionContextInterface;
-
- public function validateCustomLogic(ExecutionContextInterface $context)
- ```
-
- For all implementations of `ConstraintValidatorInterface`, this change is
- mandatory for the `initialize` method:
-
- Before:
-
- ```php
- use Symfony\Component\Validator\ConstraintValidatorInterface;
- use Symfony\Component\Validator\ExecutionContext;
-
- class MyValidator implements ConstraintValidatorInterface
- {
- public function initialize(ExecutionContext $context)
- {
- // ...
- }
- }
- ```
-
- After:
-
- ```php
- use Symfony\Component\Validator\ConstraintValidatorInterface;
- use Symfony\Component\Validator\ExecutionContextInterface;
-
- class MyValidator implements ConstraintValidatorInterface
- {
- public function initialize(ExecutionContextInterface $context)
- {
- // ...
- }
- }
- ```
-
- * The sources of the pluralized messages in translation files have changed
- from the singular to the pluralized version. If you created custom
- translation files for validator errors, you should adapt them.
-
- Before:
-
-
- You must select at least {{ limit }} choices.
- Sie müssen mindestens {{ limit }} Möglichkeit wählen.|Sie müssen mindestens {{ limit }} Möglichkeiten wählen.
-
-
- After:
-
-
- You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.
- Sie müssen mindestens {{ limit }} Möglichkeit wählen.|Sie müssen mindestens {{ limit }} Möglichkeiten wählen.
-
-
- Check the file src/Symfony/Component/Validator/Resources/translations/validators.en.xlf
- for the new message sources.
-
-#### Deprecations
-
- * The interface `ClassMetadataFactoryInterface` was deprecated and will be
- removed in Symfony 2.3. You should implement `MetadataFactoryInterface`
- instead, which changes the name of the method `getClassMetadata` to
- `getMetadataFor` and accepts arbitrary values (e.g. class names, objects,
- numbers etc.). In your implementation, you should throw a
- `NoSuchMetadataException` if you don't support metadata for the given value.
-
- Before:
-
- ```php
- use Symfony\Component\Validator\Mapping\ClassMetadataFactoryInterface;
-
- class MyMetadataFactory implements ClassMetadataFactoryInterface
- {
- public function getClassMetadata($class)
- {
- // ...
- }
- }
- ```
-
- After:
-
- ```php
- use Symfony\Component\Validator\MetadataFactoryInterface;
- use Symfony\Component\Validator\Exception\NoSuchMetadataException;
-
- class MyMetadataFactory implements MetadataFactoryInterface
- {
- public function getMetadataFor($value)
- {
- if (is_object($value)) {
- $value = get_class($value);
- }
-
- if (!is_string($value) || (!class_exists($value) && !interface_exists($value))) {
- throw new NoSuchMetadataException(...);
- }
-
- // ...
- }
- }
- ```
-
- The return value of `ValidatorInterface::getMetadataFactory()` was also
- changed to return `MetadataFactoryInterface`. Make sure to replace calls to
- `getClassMetadata` by `getMetadataFor` on the return value of this method.
-
- Before:
-
- ```php
- $metadataFactory = $validator->getMetadataFactory();
- $metadata = $metadataFactory->getClassMetadata('Vendor\MyClass');
- ```
-
- After:
-
- ```php
- $metadataFactory = $validator->getMetadataFactory();
- $metadata = $metadataFactory->getMetadataFor('Vendor\MyClass');
- ```
-
- * The class `GraphWalker` and the accessor `ExecutionContext::getGraphWalker()`
- were deprecated and will be removed in Symfony 2.3. You should use the
- methods `ExecutionContextInterface::validate()` and
- `ExecutionContextInterface::validateValue()` instead.
-
- Before:
-
- ```php
- use Symfony\Component\Validator\ExecutionContext;
-
- public function validateCustomLogic(ExecutionContext $context)
- {
- if (/* ... */) {
- $path = $context->getPropertyPath();
- $group = $context->getGroup();
-
- if (!empty($path)) {
- $path .= '.';
- }
-
- $context->getGraphWalker()->walkReference($someObject, $group, $path.'myProperty', false);
- }
- }
- ```
-
- After:
-
- ```php
- use Symfony\Component\Validator\ExecutionContextInterface;
-
- public function validateCustomLogic(ExecutionContextInterface $context)
- {
- if (/* ... */) {
- $context->validate($someObject, 'myProperty');
- }
- }
- ```
-
- * The methods `ExecutionContext::addViolationAtSubPath()` and
- `ExecutionContext::addViolationAtPath()` were deprecated and will be
- removed in Symfony 2.3. You should use `addViolationAt()` instead.
-
- Before:
-
- ```php
- use Symfony\Component\Validator\ExecutionContext;
-
- public function validateCustomLogic(ExecutionContext $context)
- {
- if (/* ... */) {
- $context->addViolationAtSubPath('myProperty', 'This value is invalid');
- }
- }
- ```
-
- After:
-
- ```php
- use Symfony\Component\Validator\ExecutionContextInterface;
-
- public function validateCustomLogic(ExecutionContextInterface $context)
- {
- if (/* ... */) {
- $context->addViolationAt('myProperty', 'This value is invalid');
- }
- }
- ```
-
- * The methods `ExecutionContext::getCurrentClass()`, `ExecutionContext::getCurrentProperty()`
- and `ExecutionContext::getCurrentValue()` were deprecated and will be removed
- in Symfony 2.3. Use the methods `getClassName()`, `getPropertyName()` and
- `getValue()` instead.
-
- Before:
-
- ```php
- use Symfony\Component\Validator\ExecutionContext;
-
- public function validateCustomLogic(ExecutionContext $context)
- {
- $class = $context->getCurrentClass();
- $property = $context->getCurrentProperty();
- $value = $context->getCurrentValue();
-
- // ...
- }
- ```
-
- After:
-
- ```php
- use Symfony\Component\Validator\ExecutionContextInterface;
-
- public function validateCustomLogic(ExecutionContextInterface $context)
- {
- $class = $context->getClassName();
- $property = $context->getPropertyName();
- $value = $context->getValue();
-
- // ...
- }
- ```
-
-### FrameworkBundle
-
- * The `render` method of the `actions` templating helper signature and arguments changed:
-
- Before:
-
- ```php
- render('BlogBundle:Post:list', array('limit' => 2), array('alt' => 'BlogBundle:Post:error')) ?>
- ```
-
- After:
-
- ```php
- render($view['router']->generate('post_list', array('limit' => 2)), array('alt' => 'BlogBundle:Post:error')) ?>
- ```
-
- where `post_list` is the route name for the `BlogBundle:Post:list`
- controller, or if you don't want to create a route:
-
- ```php
- render(new ControllerReference('BlogBundle:Post:list', array('limit' => 2)), array('alt' => 'BlogBundle:Post:error')) ?>
- ```
-
-#### Configuration
-
- * The 2.2 version introduces a new parameter `trusted_proxies` that replaces
- `trust_proxy_headers` in the framework configuration.
-
- Before:
-
- ```yaml
- # app/config/config.yml
- framework:
- trust_proxy_headers: false
- ```
-
- After:
-
- ```yaml
- # app/config/config.yml
- framework:
- trusted_proxies: ['127.0.0.1', '10.0.0.1'] # a list of proxy IPs you trust
- ```
-
-### Security
-
- * The existing ``UserPassword`` validator constraint class has been modified.
- Its namespace has been changed to better fit the Symfony coding conventions.
-
- Before:
-
- ```php
- use Symfony\Component\Security\Core\Validator\Constraint\UserPassword;
- ```
-
- After: (note the `s` at the end of `Constraint`)
-
- ```php
- use Symfony\Component\Security\Core\Validator\Constraints\UserPassword;
- ```
-
- * The new ``UserPassword`` validator constraint class now accepts a new
- ``service`` option that allows to specify a custom validator service name in
- order to validate the current logged-in user's password.
-
- ```php
- use Symfony\Component\Security\Core\Validator\Constraints\UserPassword;
-
- $constraint = new UserPassword(array(
- 'service' => 'my.custom.validator.user_password',
- ));
- ```
-
-#### Deprecations
-
- * The two previous ``UserPassword`` and ``UserPasswordValidator`` classes in
- the ``Symfony\Component\Security\Core\Validator\Constraint`` namespace have
- been deprecated and will be removed in 2.3.
-
- Before:
-
- ```php
- use Symfony\Component\Security\Core\Validator\Constraint\UserPassword;
- use Symfony\Component\Security\Core\Validator\Constraint\UserPasswordValidator;
- ```
-
- After:
-
- ```php
- use Symfony\Component\Security\Core\Validator\Constraints\UserPassword;
- use Symfony\Component\Security\Core\Validator\Constraints\UserPasswordValidator;
- ```
-
-### Serializer
-
- * All serializer interfaces (Serializer, Normalizer, Encoder) have been
- extended with an optional `$context` array. This was necessary to allow for
- more complex use-cases that require context information during the
- (de)normalization and en-/decoding steps.
-
-### HttpKernel
-
- * The `Symfony\Component\HttpKernel\Log\LoggerInterface` now extends `Psr\Log\LoggerInterface`.
- So if you have implemented your own logger, you need to implement these methods:
-
- * `emergency`
- * `critical`
- * `error`
- * `warning`
- * `log`
-
-#### Deprecations:
-
- * The following Logger methods are deprecated and will be removed in 3.0. You should use the new PSR-3 methods:
-
- * `emerg()` -> `emergency()`
- * `crit()` -> `critical()`
- * `err()` -> `error()`
- * `warn()` -> `warning()`
diff --git a/UPGRADE-2.3.md b/UPGRADE-2.3.md
deleted file mode 100644
index 3b191fae95b06..0000000000000
--- a/UPGRADE-2.3.md
+++ /dev/null
@@ -1,305 +0,0 @@
-UPGRADE FROM 2.2 to 2.3
-=======================
-
-Form
-----
-
- * Although this was not officially supported nor documented, it was possible to
- set the option "validation_groups" to false, resulting in the group "Default"
- being validated. Now, if you set "validation_groups" to false, the validation
- of a form will be skipped (except for a few integrity checks on the form).
-
- If you want to validate a form in group "Default", you should either
- explicitly set "validation_groups" to "Default" or alternatively set it to
- null.
-
- Before:
-
- ```
- // equivalent notations for validating in group "Default"
- "validation_groups" => null
- "validation_groups" => "Default"
- "validation_groups" => false
-
- // notation for skipping validation
- "validation_groups" => array()
- ```
-
- After:
-
- ```
- // equivalent notations for validating in group "Default"
- "validation_groups" => null
- "validation_groups" => "Default"
-
- // equivalent notations for skipping validation
- "validation_groups" => false
- "validation_groups" => array()
- ```
- * The array type hint from DataMapperInterface was removed. You should adapt
- implementations of that interface accordingly.
-
- Before:
-
- ```php
- use Symfony\Component\Form\DataMapperInterface;
-
- class MyDataMapper
- {
- public function mapFormsToData(array $forms, $data)
- {
- // ...
- }
-
- public function mapDataToForms($data, array $forms)
- {
- // ...
- }
- }
- ```
-
- After:
-
- ```php
- use Symfony\Component\Form\DataMapperInterface;
-
- class MyDataMapper
- {
- public function mapFormsToData($forms, $data)
- {
- // ...
- }
-
- public function mapDataToForms($data, $forms)
- {
- // ...
- }
- }
- ```
-
- Instead of an array, the methods here are now passed a
- RecursiveIteratorIterator containing an InheritDataAwareIterator by default,
- so you don't need to handle forms inheriting their parent data (former
- "virtual forms") in the data mapper anymore.
-
- Before:
-
- ```php
- use Symfony\Component\Form\Util\VirtualFormAwareIterator;
-
- public function mapFormsToData(array $forms, $data)
- {
- $iterator = new \RecursiveIteratorIterator(
- new VirtualFormAwareIterator($forms)
- );
-
- foreach ($iterator as $form) {
- // ...
- }
- }
- ```
-
- After:
-
- ```php
- public function mapFormsToData($forms, $data)
- {
- foreach ($forms as $form) {
- // ...
- }
- }
- ```
-
- * The `*_SET_DATA` events are now guaranteed to be fired *after* the children
- were added by the FormBuilder (unless setData() is called manually). Before,
- the `*_SET_DATA` events were sometimes thrown before adding child forms,
- which made it impossible to remove child forms dynamically.
-
- A consequence of this change is that you need to set the "auto_initialize"
- option to `false` for `FormInterface` instances that you pass to
- `FormInterface::add()`:
-
- Before:
-
- ```php
- $form = $factory->create('form');
- $form->add($factory->createNamed('field', 'text'));
- ```
-
- This code will now throw an exception with the following message:
-
- Automatic initialization is only supported on root forms. You should set the
- "auto_initialize" option to false on the field "field".
-
- Consequently, you need to set the "auto_initialize" option:
-
- After (Alternative 1):
-
- ```php
- $form = $factory->create('form');
- $form->add($factory->createNamed('field', 'text', array(), array(
- 'auto_initialize' => false,
- )));
- ```
-
- The problem also disappears if you work with `FormBuilder` instances instead
- of `Form` instances:
-
- After (Alternative 2):
-
- ```php
- $builder = $factory->createBuilder('form');
- $builder->add($factory->createBuilder('field', 'text'));
- $form = $builder->getForm();
- ```
-
- The best solution is in most cases to let `add()` handle the field creation:
-
- After (Alternative 3):
-
- ```php
- $form = $factory->create('form');
- $form->add('field', 'text');
- ```
-
- After (Alternative 4):
-
- ```php
- $builder = $factory->createBuilder('form');
- $builder->add('field', 'text');
- $form = $builder->getForm();
- ```
-
- * Previously, when the "data" option of a field was set to `null` and the
- containing form was mapped to an object, the field would receive the data
- from the object as default value. This functionality was unintended and fixed
- to use `null` as default value in Symfony 2.3.
-
- In cases where you made use of the previous behavior, you should now remove
- the "data" option altogether.
-
- Before:
-
- ```php
- $builder->add('field', 'text', array(
- 'data' => $defaultData ?: null,
- ));
- ```
-
- After:
-
- ```php
- $options = array();
- if ($defaultData) {
- $options['data'] = $defaultData;
- }
- $builder->add('field', 'text', $options);
- ```
-
-PropertyAccess
---------------
-
- * PropertyAccessor was changed to continue its search for a property or method
- even if a non-public match was found. This means that the property "author"
- in the following class will now correctly be found:
-
- ```php
- class Article
- {
- public $author;
-
- private function getAuthor()
- {
- // ...
- }
- }
- ```
-
- Although this is uncommon, similar cases exist in practice.
-
- Instead of the PropertyAccessDeniedException that was thrown here, the more
- generic NoSuchPropertyException is thrown now if no public property nor
- method are found by the PropertyAccessor. PropertyAccessDeniedException was
- removed completely.
-
- Before:
-
- ```php
- use Symfony\Component\PropertyAccess\Exception\PropertyAccessDeniedException;
- use Symfony\Component\PropertyAccess\Exception\NoSuchPropertyException;
-
- try {
- $value = $accessor->getValue($article, 'author');
- } catch (PropertyAccessDeniedException $e) {
- // Method/property was found but not public
- } catch (NoSuchPropertyException $e) {
- // Method/property was not found
- }
- ```
-
- After:
-
- ```php
- use Symfony\Component\PropertyAccess\Exception\NoSuchPropertyException;
-
- try {
- $value = $accessor->getValue($article, 'author');
- } catch (NoSuchPropertyException $e) {
- // Method/property was not found or not public
- }
- ```
-
-DomCrawler
-----------
-
- * `Crawler::each()` and `Crawler::reduce()` now return Crawler instances
- instead of DomElement instances:
-
- Before:
-
- ```php
- $data = $crawler->each(function ($node, $i) {
- return $node->nodeValue;
- });
- ```
-
- After:
-
- ```php
- $data = $crawler->each(function ($crawler, $i) {
- return $crawler->text();
- });
- ```
-
-Console
--------
-
- * New verbosity levels have been added, therefore if you used to do check
- the output verbosity level directly for VERBOSITY_VERBOSE you probably
- want to update it to a greater than comparison:
-
- Before:
-
- ```php
- if (OutputInterface::VERBOSITY_VERBOSE === $output->getVerbosity()) { ... }
- ```
-
- After:
-
- ```php
- if (OutputInterface::VERBOSITY_VERBOSE <= $output->getVerbosity()) { ... }
- ```
-
-BrowserKit
-----------
-
- * If you are receiving responses with non-3xx Status Code and Location header
- please be aware that you won't be able to use auto-redirects on these kind
- of responses.
-
- If you are correctly passing 3xx Status Code with Location header, you
- don't have to worry about the change.
-
- If you were using responses with Location header and non-3xx Status Code,
- you have to update your code to manually create another request to URL
- grabbed from the Location header.
diff --git a/UPGRADE-2.4.md b/UPGRADE-2.4.md
deleted file mode 100644
index d7e7bcdd48e6e..0000000000000
--- a/UPGRADE-2.4.md
+++ /dev/null
@@ -1,50 +0,0 @@
-UPGRADE FROM 2.3 to 2.4
-=======================
-
-Form
-----
-
- * The constructor parameter `$precision` in `IntegerToLocalizedStringTransformer`
- is now ignored completely, because a precision does not make sense for
- integers.
-
-EventDispatcher
-----------------
-
- * The `getDispatcher()` and `getName()` methods from `Symfony\Component\EventDispatcher\Event`
- are deprecated, the event dispatcher instance and event name can be received in the listener call instead.
-
- Before:
-
- ```php
- use Symfony\Component\EventDispatcher\Event;
-
- class Foo
- {
- public function myFooListener(Event $event)
- {
- $dispatcher = $event->getDispatcher();
- $eventName = $event->getName();
- $dispatcher->dispatch('log', $event);
-
- // ... more code
- }
- }
- ```
-
- After:
-
- ```php
- use Symfony\Component\EventDispatcher\Event;
- use Symfony\Component\EventDispatcher\EventDispatcherInterface;
-
- class Foo
- {
- public function myFooListener(Event $event, $eventName, EventDispatcherInterface $dispatcher)
- {
- $dispatcher->dispatch('log', $event);
-
- // ... more code
- }
- }
- ```
diff --git a/UPGRADE-2.5.md b/UPGRADE-2.5.md
deleted file mode 100644
index fc5ad61fadf7c..0000000000000
--- a/UPGRADE-2.5.md
+++ /dev/null
@@ -1,270 +0,0 @@
-UPGRADE FROM 2.4 to 2.5
-=======================
-
-FrameworkBundle
----------------
-
-* The `Symfony\Bundle\FrameworkBundle\Console\Descriptor\Descriptor::renderTable()`
- method expects the table to be an instance of `Symfony\Component\Console\Helper\Table`
- instead of `Symfony\Component\Console\Helper\TableHelper`.
-
-Routing
--------
-
- * Added a new optional parameter `$requiredSchemes` to `Symfony\Component\Routing\Generator\UrlGenerator::doGenerate()`
-
-Form
-----
-
- * The method `FormInterface::getErrors()` now returns an instance of
- `Symfony\Component\Form\FormErrorIterator` instead of an array. This object
- is traversable, countable and supports array access. However, you can not
- pass it to any of PHP's `array_*` functions anymore. You should use
- `iterator_to_array()` in those cases where you did.
-
- Before:
-
- ```
- $errors = array_map($callback, $form->getErrors());
- ```
-
- After:
-
- ```
- $errors = array_map($callback, iterator_to_array($form->getErrors()));
- ```
-
- * The method `FormInterface::getErrors()` now has two additional, optional
- parameters. Make sure to add these parameters to the method signatures of
- your implementations of that interface.
-
- Before:
-
- ```
- public function getErrors()
- {
- ```
-
- After:
-
- ```
- public function getErrors($deep = false, $flatten = true)
- {
- ```
-
- Before:
-
- ```
- {% if form.vars.errors %}
- ```
-
- After:
-
- ```
- {% if form.vars.errors|length %}
- ```
-
-PropertyAccess
---------------
-
- * The methods `isReadable()` and `isWritable()` were added to
- `PropertyAccessorInterface`. If you implemented this interface in your own
- code, you should add these two methods.
-
- * The methods `getValue()` and `setValue()` now throw an
- `NoSuchIndexException` instead of a `NoSuchPropertyException` when an index
- is accessed on an object that does not implement `ArrayAccess`. If you catch
- this exception in your code, you should adapt the catch statement:
-
- Before:
-
- ```php
- $object = new \stdClass();
-
- try {
- $propertyAccessor->getValue($object, '[index]');
- $propertyAccessor->setValue($object, '[index]', 'New value');
- } catch (NoSuchPropertyException $e) {
- // ...
- }
- ```
-
- After:
-
- ```php
- $object = new \stdClass();
-
- try {
- $propertyAccessor->getValue($object, '[index]');
- $propertyAccessor->setValue($object, '[index]', 'New value');
- } catch (NoSuchIndexException $e) {
- // ...
- }
- ```
-
- A `NoSuchPropertyException` is still thrown when a non-existing property is
- accessed on an object or an array.
-
-Validator
----------
-
- * EmailValidator has changed to allow `non-strict` and `strict` email validation
-
- Before:
-
- Email validation was done with php's `filter_var()`
-
- After:
-
- Default email validation is now done via a simple regex which may cause invalid emails (not RFC compliant) to be
- valid. This is the default behaviour.
-
- Strict email validation has to be explicitly activated in the configuration file by adding
-
- ```
- framework:
- //...
- validation:
- strict_email: true
- //...
-
- ```
-
- Also you have to add to your composer.json:
-
- ```
- "egulias/email-validator": "~1.2"
- ```
-
- * `ClassMetadata::getGroupSequence()` now returns `GroupSequence` instances
- instead of an array. The sequence implements `\Traversable`, `\ArrayAccess`
- and `\Countable`, so in most cases you should be fine. If you however use the
- sequence with PHP's `array_*()` functions, you should cast it to an array
- first using `iterator_to_array()`:
-
- Before:
-
- ```
- $sequence = $metadata->getGroupSequence();
- $result = array_map($callback, $sequence);
- ```
-
- After:
-
- ```
- $sequence = iterator_to_array($metadata->getGroupSequence());
- $result = array_map($callback, $sequence);
- ```
-
- * The array type hint in `ClassMetadata::setGroupSequence()` was removed. If
- you overwrite this method, make sure to remove the type hint as well. The
- method should now accept `GroupSequence` instances just as well as arrays.
-
- Before:
-
- ```
- public function setGroupSequence(array $groups)
- {
- // ...
- }
- ```
-
- After:
-
- ```
- public function setGroupSequence($groupSequence)
- {
- // ...
- }
- ```
-
- * The validation engine in `Symfony\Component\Validator\Validator` was replaced
- by a new one in `Symfony\Component\Validator\Validator\RecursiveValidator`.
- With that change, several classes were deprecated that will be removed in
- Symfony 3.0. Also, the API of the validator was slightly changed. More
- details about that can be found in UPGRADE-3.0.
-
- You can choose the desired API via the new "api" entry in
- app/config/config.yml:
-
- ```
- framework:
- validation:
- enabled: true
- api: auto
- ```
-
- When running PHP 5.3.9 or higher, Symfony will then use an implementation
- that supports both the old API and the new one:
-
- ```
- framework:
- validation:
- enabled: true
- api: 2.5-bc
- ```
-
- When running PHP lower than 5.3.9, that compatibility layer is not supported.
- On those versions, the old implementation will be used instead:
-
- ```
- framework:
- validation:
- enabled: true
- api: 2.4
- ```
-
- If you develop a new application that doesn't rely on the old API, you can
- also set the API to 2.5. In that case, the backwards compatibility layer
- will not be activated:
-
- ```
- framework:
- validation:
- enabled: true
- api: 2.5
- ```
-
- When using the validator outside of the Symfony full-stack framework, the
- desired API can be selected using `setApiVersion()` on the validator builder:
-
- ```
- // Previous implementation
- $validator = Validation::createValidatorBuilder()
- ->setApiVersion(Validation::API_VERSION_2_4)
- ->getValidator();
-
- // New implementation with backwards compatibility support
- $validator = Validation::createValidatorBuilder()
- ->setApiVersion(Validation::API_VERSION_2_5_BC)
- ->getValidator();
-
- // New implementation without backwards compatibility support
- $validator = Validation::createValidatorBuilder()
- ->setApiVersion(Validation::API_VERSION_2_5)
- ->getValidator();
- ```
-
-
-Yaml Component
---------------
-
- * The way Yaml handles duplicate keys in an array was changed from `rewrite with the
- last element` behavior to ignoring all the elements with the same key after the first one.
-
- Example:
-
- ```
- parentElement:
- firstChild: foo
- secondChild: 123
- firstChild: bar
- ```
-
- Before:
-
- This would be parsed in an array like this: `["parentElement" => ["firstChild" => "bar", "secondChild" => 123]]`
-
- After:
-
- The first value is used: `["parentElement" => ["firstChild" => "foo", "secondChild" => 123]]`
diff --git a/UPGRADE-2.6.md b/UPGRADE-2.6.md
deleted file mode 100644
index 2339eea368aa6..0000000000000
--- a/UPGRADE-2.6.md
+++ /dev/null
@@ -1,428 +0,0 @@
-UPGRADE FROM 2.5 to 2.6
-=======================
-
-Known Backwards-Compatibility Breaks
-------------------------------------
-
-* If you use the `PdoSessionHandler`, the session table now has a different
- schema and must be modified. Look below for more details.
-
-Form
-----
-
- * The "empty_value" option in the types "choice", "date", "datetime" and "time"
- was deprecated and replaced by a new option "placeholder". You should use
- the option "placeholder" together with the view variables "placeholder" and
- "placeholder_in_choices" now.
-
- The option "empty_value" and the view variables "empty_value" and
- "empty_value_in_choices" will be removed in Symfony 3.0.
-
- Before:
-
- ```php
- $form->add('category', 'choice', array(
- 'choices' => array('politics', 'media'),
- 'empty_value' => 'Select a category...',
- ));
- ```
-
- After:
-
- ```php
- $form->add('category', 'choice', array(
- 'choices' => array('politics', 'media'),
- 'placeholder' => 'Select a category...',
- ));
- ```
-
- Before:
-
- ```
- {{ form.vars.empty_value }}
-
- {% if form.vars.empty_value_in_choices %}
- ...
- {% endif %}
- ```
-
- After:
-
- ```
- {{ form.vars.placeholder }}
-
- {% if form.vars.placeholder_in_choices %}
- ...
- {% endif %}
- ```
-
-Validator
----------
-
- * The internal method `setConstraint()` was added to
- `Symfony\Component\Validator\Context\ExecutionContextInterface`. With
- this method, the context is informed about the constraint that is currently
- being validated.
-
- If you implement this interface, make sure to add the method to your
- implementation. The easiest solution is to just implement an empty method:
-
- ```php
- public function setConstraint(Constraint $constraint)
- {
- }
- ```
-
- * Prior to 2.6 `Symfony\Component\Validator\Constraints\ExpressionValidator`
- would not execute the Expression if it was attached to a property on an
- object and that property was set to `null` or an empty string.
-
- To emulate the old behaviour change your expression to something like
- this:
-
- ```
- value == null or (YOUR_EXPRESSION)
- ```
-
-Security
---------
-
- * The `SecurityContextInterface` is marked as deprecated in favor of the
- `Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface` and
- `Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface`.
- ```
- isGranted => AuthorizationCheckerInterface
- getToken => TokenStorageInterface
- setToken => TokenStorageInterface
- ```
- The Implementations have moved too, The `SecurityContext` is marked as
- deprecated and has been split to use the `AuthorizationCheckerInterface`
- and `TokenStorage`. This change is 100% Backwards Compatible as the SecurityContext
- delegates the methods.
-
- * The service `security.context` is deprecated along with the above change. Recommended
- to use instead:
- ```
- @security.authorization_checker => isGranted()
- @security.token_storage => getToken()
- @security.token_storage => setToken()
- ```
-
-HttpFoundation
---------------
-
- * The `PdoSessionHandler` to store sessions in a database changed significantly.
- This introduced a **backwards-compatibility** break in the schema of the
- session table. The following changes must be made to your session table:
-
- - Add a new integer column called `sess_lifetime`. Assuming you have the
- default column and table names, in MySQL this would be:
- ALTER TABLE `session` ADD `sess_lifetime` INT NOT NULL ;
- - Change the data column (default: `sess_value`) to be a Blob type. In
- MySQL this would be:
- ALTER TABLE `session` CHANGE `sess_value` `session_value` BLOB NOT NULL;
-
- There is also an [issue](https://github.com/symfony/symfony/issues/12834)
- that affects Windows servers.
-
- A legacy class, `LegacyPdoSessionHandler` has been created to ease backwards-compatibility issues when upgrading.
-
- The changes to the `PdoSessionHandler` are:
- - By default, it now implements session locking to prevent loss of data by concurrent access to the same session.
- - It does so using a transaction between opening and closing a session. For this reason, it's not
- recommended to use the same database connection that you also use for your application logic.
- Otherwise you have to make sure to access your database after the session is closed and committed.
- Instead of passing an existing connection to the handler, you can now also pass a DSN string which
- will be used to lazy-connect when a session is started.
- - Since accessing a session now blocks when the same session is still open, it is best practice to
- save the session as soon as you don't need to write to it anymore. For example, read-only AJAX
- request to a session can save the session immediately after opening it to increase concurrency.
- - As alternative to transactional locking you can also use advisory locks which do not require a transaction.
- Additionally, you can also revert back to no locking in case you have custom logic to deal with race conditions
- like an optimistic concurrency control approach. The locking strategy can be chosen by passing the corresponding
- constant as `lock_mode` option, e.g. `new PdoSessionHandler($pdoOrDsn, array('lock_mode' => PdoSessionHandler::LOCK_NONE))`.
- For more information please read the class documentation.
- - The expected schema of the table changed.
- - Session data is binary text that can contain null bytes and thus should also be saved as-is in a
- binary column like BLOB. For this reason, the handler does not base64_encode the data anymore.
- - A new column to store the lifetime of a session is required. This allows to have different
- lifetimes per session configured via session.gc_maxlifetime ini setting.
- - You would need to migrate the table manually if you want to keep session information of your users.
- - You could use `PdoSessionHandler::createTable` to initialize a correctly defined table depending on
- the used database vendor.
-
-OptionsResolver
----------------
-
- * The "array" type hint was removed from the `OptionsResolverInterface` methods
- `setRequired()`, `setAllowedValues()`, `addAllowedValues()`,
- `setAllowedTypes()` and `addAllowedTypes()`. You must remove the type hint
- from your implementations.
-
- * The interface `OptionsResolverInterface` was deprecated, since
- `OptionsResolver` instances are not supposed to be shared between classes.
- You should type hint against `OptionsResolver` instead.
-
- Before:
-
- ```php
- protected function configureOptions(OptionsResolverInterface $resolver)
- {
- // ...
- }
- ```
-
- After:
-
- ```php
- protected function configureOptions(OptionsResolver $resolver)
- {
- // ...
- }
- ```
-
- * `OptionsResolver::isRequired()` now returns `true` if a required option has
- a default value set. The new method `isMissing()` exhibits the old
- functionality of `isRequired()`.
-
- Before:
-
- ```php
- $resolver->setRequired(array('port'));
-
- $resolver->isRequired('port');
- // => true
-
- $resolver->setDefaults(array('port' => 25));
-
- $resolver->isRequired('port');
- // => false
- ```
-
- After:
-
- ```php
- $resolver->setRequired(array('port'));
-
- $resolver->isRequired('port');
- // => true
- $resolver->isMissing('port');
- // => true
-
- $resolver->setDefaults(array('port' => 25));
-
- $resolver->isRequired('port');
- // => true
- $resolver->isMissing('port');
- // => false
- ```
-
- * `OptionsResolver::replaceDefaults()` was deprecated. Use `clear()` and
- `setDefaults()` instead.
-
- Before:
-
- ```php
- $resolver->replaceDefaults(array(
- 'port' => 25,
- ));
- ```
-
- After:
-
- ```php
- $resolver->clear();
- $resolver->setDefaults(array(
- 'port' => 25,
- ));
- ```
-
- * `OptionsResolver::setOptional()` was deprecated. Use `setDefined()` instead.
-
- Before:
-
- ```php
- $resolver->setOptional(array('port'));
- ```
-
- After:
-
- ```php
- $resolver->setDefined('port');
- ```
-
- * `OptionsResolver::isKnown()` was deprecated. Use `isDefined()` instead.
-
- Before:
-
- ```php
- if ($resolver->isKnown('port')) {
- // ...
- }
- ```
-
- After:
-
- ```php
- if ($resolver->isDefined('port')) {
- // ...
- }
- ```
-
- * The methods `setAllowedValues()`, `addAllowedValues()`, `setAllowedTypes()`
- and `addAllowedTypes()` were changed to modify one option at a time instead
- of batch processing options. The old API exists for backwards compatibility,
- but will be removed in Symfony 3.0.
-
- Before:
-
- ```php
- $resolver->setAllowedValues(array(
- 'method' => array('POST', 'GET'),
- ));
- ```
-
- After:
-
- ```php
- $resolver->setAllowedValues('method', array('POST', 'GET'));
- ```
-
- * The class `Options` was merged into `OptionsResolver`. If you instantiated
- this class manually, you should instantiate `OptionsResolver` now.
- `Options` is now a marker interface implemented by `OptionsResolver`.
-
- Before:
-
- ```php
- $options = new Options();
- ```
-
- After:
-
- ```php
- $resolver = new OptionsResolver();
- ```
-
- * Normalizers for defined but unset options are not executed anymore. If you
- want to have them executed, you should define a default value.
-
- Before:
-
- ```php
- $resolver->setOptional(array('port'));
- $resolver->setNormalizers(array(
- 'port' => function ($options, $value) {
- // return normalized value
- }
- ));
-
- $options = $resolver->resolve($options);
- ```
-
- After:
-
- ```php
- $resolver->setDefault('port', null);
- $resolver->setNormalizer('port', function ($options, $value) {
- // return normalized value
- });
-
- $options = $resolver->resolve($options);
- ```
-
- * When undefined options are passed, `resolve()` now throws an
- `UndefinedOptionsException` instead of an `InvalidOptionsException`.
- `InvalidOptionsException` is only thrown when option values fail their
- validation constraints.
-
- Before:
-
- ```php
- $resolver->setDefaults(array(
- 'transport' => 'smtp',
- 'port' => 25,
- ));
- $resolver->setAllowedTypes(array(
- 'port' => 'integer',
- ));
-
- // throws InvalidOptionsException
- $resolver->resolve(array('foo' => 'bar'));
-
- // throws InvalidOptionsException
- $resolver->resolve(array('port' => '25'));
- ```
-
- After:
-
- ```php
- $resolver->setDefaults(array(
- 'transport' => 'smtp',
- 'port' => 25,
- ));
- $resolver->setAllowedTypes(array(
- 'port' => 'integer',
- ));
-
- // throws UndefinedOptionsException
- $resolver->resolve(array('foo' => 'bar'));
-
- // throws InvalidOptionsException
- $resolver->resolve(array('port' => '25'));
- ```
-
-VarDumper and DebugBundle
--------------------------
-
-The component and the bundle are new to Symfony 2.6. We encourage you
-to enable the bundle in your `app/AppKernel.php` for the *dev* or *test*
-environments. Just add this line before loading the `WebProfilerBundle`:
-
-```php
-$bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle();
-```
-
-Then enjoy dumping variables by calling `dump($var)` anywhere in your PHP
-and `{% dump var %}` or `{{ dump(var) }}` in Twig. Dumps are displayed
-**in the web debug toolbar**.
-
-Translation
------------
-
-With `LoggingTranslator`, a new translator class is introduced with Symfony
-2.6. By default, the `@translator` service is referring to this class in the
-debug environment.
-
-If you have your own services that depend on the `@translator` service and expect
-this service to be an instance of either
-`Symfony\Component\Translation\Translator` or
-`Symfony\Bundle\FrameworkBundle\Translation\Translator`, e.g. by type-hinting
-for either of these classes, you will need to change that type hint. You can
-use the `TranslatorInterface` to be on the safe side for future changes.
-
-Before:
-
-```php
-use Symfony\Component\Translation\Translator;
-
-class MyService {
- public function __construct(Translator $translator)
- {
- ...
- }
-}
-```
-
-After:
-
-```php
-use Symfony\Component\Translation\TranslatorInterface;
-
-class MyService {
- public function __construct(TranslatorInterface $translator)
- {
- ...
- }
-}
-```
diff --git a/UPGRADE-2.7.md b/UPGRADE-2.7.md
deleted file mode 100644
index f52220fadc2ed..0000000000000
--- a/UPGRADE-2.7.md
+++ /dev/null
@@ -1,721 +0,0 @@
-UPGRADE FROM 2.6 to 2.7
-=======================
-
-Global
-------
-
- * Deprecation notices -
- `@trigger_error('... is deprecated ...', E_USER_DEPRECATED)` -
- are now triggered when using any deprecated functionality.
-
- By default these notices are silenced, so they won't appear in the PHP logs of
- your production server. However, these notices are still visible in the web
- debug toolbar, so you can know where your code needs an upgrade.
-
- In addition, it's strongly recommended to enable the [phpunit-bridge](https://github.com/symfony/phpunit-bridge)
- so that you can deal with deprecation notices in your test suite.
-
-Router
-------
-
- * Route conditions now support container parameters which
- can be injected into condition using `%parameter%` notation.
- Due to the fact that it works by replacing all parameters
- with their corresponding values before passing condition
- expression for compilation there can be BC breaks where you
- could already have used percentage symbols. Single percentage symbol
- usage is not affected in any way. Conflicts may occur where
- you might have used `%` as a modulo operator, here's an example:
- `foo%bar%2` which would be compiled to `$foo % $bar % 2` in 2.6
- but in 2.7 you would get an error if `bar` parameter
- doesn't exist or unexpected result otherwise.
-
- * The `getMatcherDumperInstance()` and `getGeneratorDumperInstance()` methods in the
- `Symfony\Component\Routing\Router` have been changed from `protected` to `public`.
- If you override these methods in a subclass, you will need to change your
- methods to `public` as well. Note however that this is a temporary change needed for
- PHP 5.3 compatibility only. It will be reverted in Symfony 3.0.
-
-Form
-----
-
- * In form types and extension overriding the "setDefaultOptions" of the
- AbstractType or AbstractExtensionType has been deprecated in favor of
- overriding the new "configureOptions" method.
-
- The method "setDefaultOptions(OptionsResolverInterface $resolver)" will
- be renamed in Symfony 3.0 to "configureOptions(OptionsResolver $resolver)".
-
- Before:
-
- ```php
- use Symfony\Component\OptionsResolver\OptionsResolverInterface;
-
- class TaskType extends AbstractType
- {
- // ...
- public function setDefaultOptions(OptionsResolverInterface $resolver)
- {
- $resolver->setDefaults(array(
- 'data_class' => 'AppBundle\Entity\Task',
- ));
- }
- }
- ```
-
- After:
-
- ```php
- use Symfony\Component\OptionsResolver\OptionsResolver;
-
- class TaskType extends AbstractType
- {
- // ...
- public function configureOptions(OptionsResolver $resolver)
- {
- $resolver->setDefaults(array(
- 'data_class' => 'AppBundle\Entity\Task',
- ));
- }
- }
- ```
-
- * The "choice_list" option of ChoiceType was deprecated. You should use
- "choices_as_values" or "choice_loader" now.
-
- Before:
-
- ```php
- $form->add('status', 'choice', array(
- 'choice_list' => new ObjectChoiceList(array(
- Status::getInstance(Status::ENABLED),
- Status::getInstance(Status::DISABLED),
- Status::getInstance(Status::IGNORED),
- )),
- ));
- ```
-
- After:
-
- ```php
- $form->add('status', 'choice', array(
- 'choices' => array(
- Status::getInstance(Status::ENABLED),
- Status::getInstance(Status::DISABLED),
- Status::getInstance(Status::IGNORED),
- ),
- 'choices_as_values' => true,
- ));
- ```
-
- * You should flip the keys and values of the "choices" option in ChoiceType
- and set the "choices_as_values" option to `true`. The default value of that
- option will be switched to `true` in Symfony 3.0.
-
- Before:
-
- ```php
- $form->add('status', 'choice', array(
- 'choices' => array(
- Status::ENABLED => 'Enabled',
- Status::DISABLED => 'Disabled',
- Status::IGNORED => 'Ignored',
- )),
- ));
- ```
-
- After:
-
- ```php
- $form->add('status', 'choice', array(
- 'choices' => array(
- 'Enabled' => Status::ENABLED,
- 'Disabled' => Status::DISABLED,
- 'Ignored' => Status::IGNORED,
- ),
- 'choices_as_values' => true,
- // important if you rely on your option value attribute (e.g. for JavaScript)
- // this will keep the same functionality as before
- 'choice_value' => function ($choice) {
- return $choice;
- },
- ));
- ```
-
- * `Symfony\Component\Form\Extension\Core\ChoiceList\ChoiceListInterface` was
- deprecated and will be removed in Symfony 3.0. You should use
- `Symfony\Component\Form\ChoiceList\ChoiceListInterface` instead.
-
- Before:
-
- ```php
- use Symfony\Component\Form\Extension\Core\ChoiceList\ChoiceListInterface;
-
- public function doSomething(ChoiceListInterface $choiceList)
- {
- // ...
- }
- ```
-
- After:
-
- ```php
- use Symfony\Component\Form\ChoiceList\ChoiceListInterface;
-
- public function doSomething(ChoiceListInterface $choiceList)
- {
- // ...
- }
- ```
-
- * `Symfony\Component\Form\Extension\Core\View\ChoiceView` was
- deprecated and will be removed in Symfony 3.0. You should use
- `Symfony\Component\Form\ChoiceList\View\ChoiceView` instead.
- The constructor arguments of the new class are in the same order than in the
- deprecated one (this was not true in 2.7.0 but has been fixed in 2.7.1).
-
- * `Symfony\Component\Form\Extension\Core\ChoiceList\ChoiceList` was
- deprecated and will be removed in Symfony 3.0. You should use
- `Symfony\Component\Form\ChoiceList\Factory\DefaultChoiceListFactory` instead.
-
- Before:
-
- ```php
- use Symfony\Component\Form\Extension\Core\ChoiceList\ChoiceList;
-
- $choiceList = new ChoiceList(
- array(Status::ENABLED, Status::DISABLED, Status::IGNORED),
- array('Enabled', 'Disabled', 'Ignored'),
- // Preferred choices
- array(Status::ENABLED),
- );
- ```
-
- After:
-
- ```php
- use Symfony\Component\Form\ChoiceList\Factory\DefaultChoiceListFactory;
-
- $factory = new DefaultChoiceListFactory();
-
- $choices = array(Status::ENABLED, Status::DISABLED, Status::IGNORED);
- $labels = array('Enabled', 'Disabled', 'Ignored');
-
- $choiceList = $factory->createListFromChoices($choices);
-
- $choiceListView = $factory->createView(
- $choiceList,
- // Preferred choices
- array(Status::ENABLED),
- // Labels
- function ($choice, $key) use ($labels) {
- return $labels[$key];
- }
- );
- ```
-
- * `Symfony\Component\Form\Extension\Core\ChoiceList\LazyChoiceList` was
- deprecated and will be removed in Symfony 3.0. You should use
- `Symfony\Component\Form\ChoiceList\Factory\DefaultChoiceListFactory::createListFromLoader()`
- together with an implementation of
- `Symfony\Component\Form\ChoiceList\Loader\ChoiceLoaderInterface` instead.
-
- Before:
-
- ```php
- use Symfony\Component\Form\Extension\Core\ChoiceList\LazyChoiceList;
-
- class MyLazyChoiceList extends LazyChoiceList
- {
- public function loadChoiceList()
- {
- // load $choiceList
-
- return $choiceList;
- }
- }
-
- $choiceList = new MyLazyChoiceList();
- ```
-
- After:
-
- ```php
- use Symfony\Component\Form\ChoiceList\Factory\DefaultChoiceListFactory;
- use Symfony\Component\Form\ChoiceList\Loader\ChoiceLoaderInterface;
-
- class MyChoiceLoader implements ChoiceLoaderInterface
- {
- // ...
- }
-
- $factory = new DefaultChoiceListFactory();
-
- $choiceList = $factory->createListFromLoader(new MyChoiceLoader());
- ```
-
- * `Symfony\Component\Form\Extension\Core\ChoiceList\ObjectChoiceList` was
- deprecated and will be removed in Symfony 3.0. You should use
- `Symfony\Component\Form\ChoiceList\Factory\DefaultChoiceListFactory` instead.
-
- Before:
-
- ```php
- use Symfony\Component\Form\Extension\Core\ChoiceList\ObjectChoiceList;
-
- $choiceList = new ObjectChoiceList(
- array(Status::getInstance(Status::ENABLED), Status::getInstance(Status::DISABLED)),
- // Label property
- 'name'
- );
- ```
-
- After:
-
- ```php
- use Symfony\Component\Form\ChoiceList\Factory\DefaultChoiceListFactory;
-
- $factory = new DefaultChoiceListFactory();
-
- $choiceList = $factory->createListFromChoices(array(
- Status::getInstance(Status::ENABLED),
- Status::getInstance(Status::DISABLED),
- ));
-
- $choiceListView = $factory->createView(
- $choiceList,
- // Preferred choices
- array(),
- // Label property
- 'name'
- );
- ```
-
- * `Symfony\Component\Form\Extension\Core\ChoiceList\SimpleChoiceList` was
- deprecated and will be removed in Symfony 3.0. You should use
- `Symfony\Component\Form\ChoiceList\Factory\DefaultChoiceListFactory` instead.
-
- Before:
-
- ```php
- use Symfony\Component\Form\Extension\Core\ChoiceList\SimpleChoiceList;
-
- $choiceList = new SimpleChoiceList(array(
- Status::ENABLED => 'Enabled',
- Status::DISABLED => 'Disabled',
- ));
- ```
-
- After:
-
- ```php
- use Symfony\Component\Form\ChoiceList\Factory\DefaultChoiceListFactory;
-
- $factory = new DefaultChoiceListFactory();
-
- $choices = array(Status::ENABLED, Status::DISABLED);
- $labels = array('Enabled', 'Disabled');
-
- $choiceList = $factory->createListFromChoices($choices);
-
- $choiceListView = $factory->createView(
- $choiceList,
- // Preferred choices
- array(),
- // Label
- function ($choice, $key) use ($labels) {
- return $labels[$key];
- }
- );
- ```
-
- * The "property" option of `DoctrineType` was deprecated. You should use the
- new inherited option "choice_label" instead, which has the same effect.
-
- Before:
-
- ```php
- $form->add('tags', 'entity', array(
- 'class' => 'Acme\Entity\MyTag',
- 'property' => 'name',
- ))
- ```
-
- After:
-
- ```php
- $form->add('tags', 'entity', array(
- 'class' => 'Acme\Entity\MyTag',
- 'choice_label' => 'name',
- ))
- ```
-
- * The "loader" option of `DoctrineType` was deprecated and will be removed in
- Symfony 3.0. You should override the `getLoader()` method instead in a custom
- type.
-
- Before:
-
- ```php
- $form->add('tags', 'entity', array(
- 'class' => 'Acme\Entity\MyTag',
- 'loader' => new MyEntityLoader(),
- ))
- ```
-
- After:
-
- ```php
- class MyEntityType extends DoctrineType
- {
- // ...
-
- public function getLoader()
- {
- return new MyEntityLoader();
- }
- }
- ```
-
- * `Symfony\Bridge\Doctrine\Form\ChoiceList\EntityChoiceList` was
- deprecated and will be removed in Symfony 3.0. You should use
- `Symfony\Bridge\Doctrine\Form\ChoiceList\DoctrineChoiceLoader` instead.
-
- Before:
-
- ```php
- use Symfony\Component\Form\Extension\Core\ChoiceList\SimpleChoiceList;
-
- $choiceList = new EntityChoiceList($em, 'Acme\Entity\MyEntity');
- ```
-
- After:
-
- ```php
- use Symfony\Component\Form\ChoiceList\Factory\DefaultChoiceListFactory;
-
- $factory = new DefaultChoiceListFactory();
-
- $choices = array(Status::ENABLED, Status::DISABLED);
- $labels = array('Enabled', 'Disabled');
-
- $choiceLoader = new DoctrineChoiceLoader($factory, $em, 'Acme\Entity\MyEntity');
- $choiceList = $factory->createListFromLoader($choiceLoader);
- ```
-
- * Passing a query builder closure to `ORMQueryBuilderLoader` was deprecated and
- will not be supported anymore in Symfony 3.0. You should pass resolved query
- builders only.
-
- Consequently, the arguments `$manager` and `$class` of `ORMQueryBuilderLoader`
- have been deprecated as well.
-
- Note that the "query_builder" option of `DoctrineType` *does* support
- closures, but the closure is now resolved in the type instead of in the
- loader.
-
- Before:
-
- ```php
- use Symfony\Bridge\Doctrine\Form\ChoiceList\ORMQueryBuilderLoader;
-
- $queryBuilder = function () {
- // return QueryBuilder
- };
- $loader = new ORMQueryBuilderLoader($queryBuilder);
- ```
-
- After:
-
- ```php
- use Symfony\Bridge\Doctrine\Form\ChoiceList\ORMQueryBuilderLoader;
-
- // create $queryBuilder
- $loader = new ORMQueryBuilderLoader($queryBuilder);
- ```
-
- * The classes `ChoiceToBooleanArrayTransformer`,
- `ChoicesToBooleanArrayTransformer`, `FixRadioInputListener` and
- `FixCheckboxInputListener` were deprecated and will be removed in Symfony 3.0.
- Their functionality is covered by the new classes `RadioListMapper` and
- `CheckboxListMapper`.
-
- * The ability to translate Doctrine type entries by the translator component
- is now disabled by default and to enable it you must explicitly set the option
- "choice_translation_domain" to true
-
- Before:
-
- ```php
- $form->add('products', 'entity', array(
- 'class' => 'AppBundle/Entity/Product',
- ));
- ```
-
- After:
-
- ```php
- $form->add('products', 'entity', array(
- 'class' => 'AppBundle/Entity/Product',
- 'choice_translation_domain' => true,
- ));
- ```
-
- * In the block `choice_widget_options` the `translation_domain` has been replaced
- with the `choice_translation_domain` option.
-
- Before:
-
- ```jinja
- {{ choice.label|trans({}, translation_domain) }}
- ```
-
- After:
-
- ```jinja
- {{ choice_translation_domain is same as(false) ? choice.label : choice.label|trans({}, choice_translation_domain) }}
- ```
-
-Serializer
-----------
-
- * The `setCamelizedAttributes()` method of the
- `Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer` and
- `Symfony\Component\Serializer\Normalizer\PropertyNormalizer` classes is marked
- as deprecated in favor of the new NameConverter system.
-
- Before:
-
- ```php
- $normalizer->setCamelizedAttributes(array('foo_bar', 'bar_foo'));
- ```
-
- After:
-
- ```php
- use Symfony\Component\Serializer\NameConverter\CamelCaseToSnakeCaseNameConverter;
- use Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer;
-
- $nameConverter = new CamelCaseToSnakeCaseNameConverter(array('fooBar', 'barFoo'));
- $normalizer = new GetSetMethodNormalizer(null, $nameConverter);
- ```
-
- * `Symfony\Component\Serializer\Exception\ExceptionInterface` is the new name for the now
- deprecated `Symfony\Component\Serializer\Exception\Exception` interface.
-
-PropertyAccess
---------------
-
- * `UnexpectedTypeException` now expects three constructor arguments: The invalid property value,
- the `PropertyPathInterface` object and the current index of the property path.
-
- Before:
-
- ```php
- use Symfony\Component\PropertyAccess\Exception\UnexpectedTypeException;
-
- new UnexpectedTypeException($value, $expectedType);
- ```
-
- After:
-
- ```php
- use Symfony\Component\PropertyAccess\Exception\UnexpectedTypeException;
-
- new UnexpectedTypeException($value, $path, $pathIndex);
- ```
-
-Config
-------
-
- * The `__toString()` method of the `\Symfony\Component\Config\ConfigCache` is marked as
- deprecated in favor of the new `getPath()` method.
-
-Validator
----------
-
- * The PHP7-incompatible constraints (Null, True, False) and related validators
- (NullValidator, TrueValidator, FalseValidator) are marked as deprecated
- in favor of their `Is`-prefixed equivalent.
-
-Console
--------
-
- * The `Symfony\Component\Console\Input\InputDefinition::getSynopsis()` method
- now has an optional argument (it previously had no arguments). If you override
- this method, you'll need to add this argument so that your signature matches:
-
- Before:
-
- ```php
- public function getSynopsis()
- {
- // ...
- }
- ```
-
- After:
-
- ```php
- public function getSynopsis($short = false)
- {
- // ...
- }
- ```
-
-TwigBundle
-----------
-
- * The `Symfony\Bundle\TwigBundle\TwigDefaultEscapingStrategy` is deprecated and no longer
- used in favor of `Twig_FileExtensionEscapingStrategy`. This means that CSS files automatically
- use the CSS escape strategy. This can cause different behaviour when outputting reserved
- characters.
-
- Before:
-
- ```css
- {# styles.css.twig #}
-
- {# with brand_color: '#123456' #}
- body {
- background: {{ brand_color }};
- }
- ```
-
- After:
-
- ```css
- {# styles.css.twig #}
-
- {# with brand_color: '#123456' #}
- body {
- background: {{ brand_color|raw }};
- }
- ```
-
-FrameworkBundle
----------------
-
- * The `templating.helper.assets` was refactored and returns now an object of the type
- `Symfony\Bundle\FrameworkBundle\Templating\Helper\AssetsHelper` instead of
- `Symfony\Component\Templating\Helper\CoreAssetsHelper`. You can update your class definition
- or use the `assets.packages` service instead. Using the `assets.packages` service is the recommended
- way. The `templating.helper.assets` service will be removed in Symfony 3.0.
-
- Before:
-
- ```php
- use Symfony\Component\Templating\Helper\CoreAssetsHelper;
-
- class DemoService
- {
- private $assetsHelper;
-
- public function __construct(CoreAssetsHelper $assetsHelper)
- {
- $this->assetsHelper = $assetsHelper;
- }
-
- public function testMethod()
- {
- return $this->assetsHelper->getUrl('thumbnail.png', null, $this->assetsHelper->getVersion());
- }
- }
- ```
-
- After:
-
- ```php
- use Symfony\Component\Asset\Packages;
-
- class DemoService
- {
- private $assetPackages;
-
- public function __construct(Packages $assetPackages)
- {
- $this->assetPackages = $assetPackages;
- }
-
- public function testMethod()
- {
- return $this->assetPackages->getUrl('thumbnail.png').$this->assetPackages->getVersion();
- }
- }
- ```
-
-Security
----------------
-
- * Injection of the `security.context` service has been reduced to a bare minimum. This means
- that arguments that once hinted `SecurityContext` or `SecurityContextInterface` will have
- to be updated accordingly to either the `TokenStorageInterface` or `AuthorizationCheckerInterface`.
- The following classes now require the `security.token_storage` service instead of the `security.context`,
- please update your extending implementations accordingly.
-
- * `AbstractAuthenticationListener`
- * `AnonymousAuthenticationListener`
- * `ContextListener`
- * `SimplePreAuthenticationListener`
- * `X509AuthenticationListener`
- * `RemoteUserAuthenticationListener`
- * `BasicAuthenticationListener`
- * `DigestAuthenticationListener`
- * `ExceptionListener`
- * `SwitchUserListener`
- * `AccessListener`
- * `RememberMeListener`
-
-UPGRADE FROM 2.7.1 to 2.7.2
-===========================
-
-Form
-----
-
- * In order to fix a few regressions in the new `ChoiceList` implementation,
- a few details had to be changed compared to 2.7.
-
- The legacy `Symfony\Component\Form\Extension\Core\ChoiceList\ChoiceListInterface`
- now does not extend the new `Symfony\Component\Form\ChoiceList\ChoiceListInterface`
- anymore. If you pass an implementation of the old interface in a context
- where the new interface is required, wrap the list into a
- `LegacyChoiceListAdapter`:
-
- Before:
-
- ```php
- use Symfony\Component\Form\ChoiceList\ChoiceListInterface;
-
- function doSomething(ChoiceListInterface $choiceList)
- {
- // ...
- }
-
- doSomething($legacyList);
- ```
-
- After:
-
- ```php
- use Symfony\Component\Form\ChoiceList\ChoiceListInterface;
- use Symfony\Component\Form\ChoiceList\LegacyChoiceListAdapter;
-
- function doSomething(ChoiceListInterface $choiceList)
- {
- // ...
- }
-
- doSomething(new LegacyChoiceListAdapter($legacyList));
- ```
-
- The new `ChoiceListInterface` now has two additional methods
- `getStructuredValues()` and `getOriginalKeys()`. You should add these methods
- if you implement this interface. See their doc blocks and the implementation
- of the core choice lists for inspiration.
-
- The method `ArrayKeyChoiceList::toArrayKey()` was marked as internal. This
- method was never supposed to be used outside the class.
-
- The method `ChoiceListFactoryInterface::createView()` does not accept arrays
- and `Traversable` instances anymore for the `$groupBy` parameter. Pass a
- callable instead.
diff --git a/UPGRADE-2.8.md b/UPGRADE-2.8.md
deleted file mode 100644
index 655acee0de431..0000000000000
--- a/UPGRADE-2.8.md
+++ /dev/null
@@ -1,421 +0,0 @@
-UPGRADE FROM 2.7 to 2.8
-=======================
-
-Form
-----
-
- * The "cascade_validation" option was deprecated. Use the "constraints"
- option together with the `Valid` constraint instead. Contrary to
- "cascade_validation", "constraints" must be set on the respective child forms,
- not the parent form.
-
- Before:
-
- ```php
- $form = $this->createFormBuilder($article, array('cascade_validation' => true))
- ->add('author', new AuthorType())
- ->getForm();
- ```
-
- After:
-
- ```php
- use Symfony\Component\Validator\Constraints\Valid;
-
- $form = $this->createFormBuilder($article)
- ->add('author', new AuthorType(), array(
- 'constraints' => new Valid(),
- ))
- ->getForm();
- ```
-
- Alternatively, you can set the `Valid` constraint in the model itself:
-
- ```php
- use Symfony\Component\Validator\Constraints as Assert;
-
- class Article
- {
- /**
- * @Assert\Valid
- */
- private $author;
- }
- ```
-
- * Type names were deprecated and will be removed in Symfony 3.0. Instead of
- referencing types by name, you should reference them by their
- fully-qualified class name (FQCN) instead. With PHP 5.5 or later, you can
- use the "class" constant for that:
-
- Before:
-
- ```php
- $form = $this->createFormBuilder()
- ->add('name', 'text')
- ->add('age', 'integer')
- ->getForm();
- ```
-
- After:
-
- ```php
- use Symfony\Component\Form\Extension\Core\Type\IntegerType;
- use Symfony\Component\Form\Extension\Core\Type\TextType;
-
- $form = $this->createFormBuilder()
- ->add('name', TextType::class)
- ->add('age', IntegerType::class)
- ->getForm();
- ```
-
- As a further consequence, the method `FormTypeInterface::getName()` was
- deprecated and will be removed in Symfony 3.0. You should remove this method
- from your form types.
-
- If you want to customize the block prefix of a type in Twig, you should now
- implement `FormTypeInterface::getBlockPrefix()` instead:
-
- Before:
-
- ```php
- class UserProfileType extends AbstractType
- {
- public function getName()
- {
- return 'profile';
- }
- }
- ```
-
- After:
-
- ```php
- class UserProfileType extends AbstractType
- {
- public function getBlockPrefix()
- {
- return 'profile';
- }
- }
- ```
-
- If you don't customize `getBlockPrefix()`, it defaults to the class name
- without "Type" suffix in underscore notation (here: "user_profile").
-
- If you want to create types that are compatible with Symfony 2.3 up to 2.8
- and don't trigger deprecation errors, implement *both* `getName()` and
- `getBlockPrefix()`:
-
- ```php
- class ProfileType extends AbstractType
- {
- public function getName()
- {
- return $this->getBlockPrefix();
- }
-
- public function getBlockPrefix()
- {
- return 'profile';
- }
- }
- ```
-
- If you define your form types in the Dependency Injection configuration, you
- should further remove the "alias" attribute:
-
- Before:
-
- ```xml
-
-
-
- ```
-
- After:
-
- ```xml
-
-
-
- ```
-
- Type extension should return the fully-qualified class name of the extended
- type from `FormTypeExtensionInterface::getExtendedType()` now.
-
- Before:
-
- ```php
- class MyTypeExtension extends AbstractTypeExtension
- {
- public function getExtendedType()
- {
- return 'form';
- }
- }
- ```
-
- After:
-
- ```php
- use Symfony\Component\Form\Extension\Core\Type\FormType;
-
- class MyTypeExtension extends AbstractTypeExtension
- {
- public function getExtendedType()
- {
- return FormType::class;
- }
- }
- ```
-
- If your extension has to be compatible with Symfony 2.3-2.8, use the
- following statement:
-
- ```php
- use Symfony\Component\Form\AbstractType;
- use Symfony\Component\Form\Extension\Core\Type\FormType;
-
- class MyTypeExtension extends AbstractTypeExtension
- {
- public function getExtendedType()
- {
- return method_exists(AbstractType::class, 'getBlockPrefix') ? FormType::class : 'form';
- }
- }
- ```
-
- * Returning type instances from `FormTypeInterface::getParent()` is deprecated
- and will not be supported anymore in Symfony 3.0. Return the fully-qualified
- class name of the parent type class instead.
-
- Before:
-
- ```php
- class MyType
- {
- public function getParent()
- {
- return new ParentType();
- }
- }
- ```
-
- After:
-
- ```php
- class MyType
- {
- public function getParent()
- {
- return ParentType::class;
- }
- }
- ```
-
- * Passing type instances to `Form::add()`, `FormBuilder::add()` and the
- `FormFactory::create*()` methods is deprecated and will not be supported
- anymore in Symfony 3.0. Pass the fully-qualified class name of the type
- instead.
-
- Before:
-
- ```php
- $form = $this->createForm(new MyType());
- ```
-
- After:
-
- ```php
- $form = $this->createForm(MyType::class);
- ```
-
-Translator
-----------
-
- * The `getMessages()` method of the `Symfony\Component\Translation\Translator` was deprecated and will be removed in
- Symfony 3.0. You should use the `getCatalogue()` method of the `Symfony\Component\Translation\TranslatorBagInterface`.
-
- Before:
-
- ```php
- $messages = $translator->getMessages();
- ```
-
- After:
-
- ```php
- $catalogue = $translator->getCatalogue($locale);
- $messages = $catalogue->all();
-
- while ($catalogue = $catalogue->getFallbackCatalogue()) {
- $messages = array_replace_recursive($catalogue->all(), $messages);
- }
- ```
-
-DependencyInjection
--------------------
-
- * The concept of scopes were deprecated, the deprecated methods are:
-
- - `Symfony\Component\DependencyInjection\ContainerBuilder::getScopes()`
- - `Symfony\Component\DependencyInjection\ContainerBuilder::getScopeChildren()`
- - `Symfony\Component\DependencyInjection\ContainerInterface::enterScope()`
- - `Symfony\Component\DependencyInjection\ContainerInterface::leaveScope()`
- - `Symfony\Component\DependencyInjection\ContainerInterface::addScope()`
- - `Symfony\Component\DependencyInjection\ContainerInterface::hasScope()`
- - `Symfony\Component\DependencyInjection\ContainerInterface::isScopeActive()`
- - `Symfony\Component\DependencyInjection\Definition::setScope()`
- - `Symfony\Component\DependencyInjection\Definition::getScope()`
- - `Symfony\Component\DependencyInjection\Reference::isStrict()`
-
- Also, the `$scope` and `$strict` parameters of `Symfony\Component\DependencyInjection\ContainerInterface::set()` and `Symfony\Component\DependencyInjection\Reference` respectively were deprecated.
-
- * A new `shared` flag has been added to the service definition
- in replacement of the `prototype` scope.
-
- Before:
-
- ```php
- use Symfony\Component\DependencyInjection\ContainerBuilder;
-
- $container = new ContainerBuilder();
- $container
- ->register('foo', 'stdClass')
- ->setScope(ContainerBuilder::SCOPE_PROTOTYPE)
- ;
- ```
-
- ```yml
- services:
- foo:
- class: stdClass
- scope: prototype
- ```
-
- ```xml
-
-
-
- ```
-
- After:
-
- ```php
- use Symfony\Component\DependencyInjection\ContainerBuilder;
-
- $container = new ContainerBuilder();
- $container
- ->register('foo', 'stdClass')
- ->setShared(false)
- ;
- ```
-
- ```yml
- services:
- foo:
- class: stdClass
- shared: false
- ```
-
- ```xml
-
-
-
- ```
-
-Web Development Toolbar
------------------------
-
-The web development toolbar has been completely redesigned. This update has
-introduced some changes in the HTML markup of the toolbar items.
-
-Before:
-
-Information was wrapped with simple `` elements:
-
-```twig
-{% block toolbar %}
- {% set icon %}
-
-
- {{ '%.1f'|format(collector.memory / 1024 / 1024) }} MB
-
- {% endset %}
-{% endblock %}
-```
-
-After:
-
-Information is now semantically divided into values and labels according to
-the `class` attribute of each `` element:
-
-```twig
-{% block toolbar %}
- {% set icon %}
-
-
- {{ '%.1f'|format(collector.memory / 1024 / 1024) }}
-
- MB
- {% endset %}
-{% endblock %}
-```
-
-Most of the blocks designed for the previous toolbar will still be displayed
-correctly. However, if you want to support both the old and the new toolbar,
-it's better to make use of the new `profiler_markup_version` variable passed
-to the toolbar templates:
-
-```twig
-{% block toolbar %}
- {% set profiler_markup_version = profiler_markup_version|default(1) %}
-
- {% set icon %}
- {% if profiler_markup_version == 1 %}
-
- {# code for the original toolbar #}
-
- {% else %}
-
- {# code for the new toolbar (Symfony 2.8+) #}
-
- {% endif %}
- {% endset %}
-{% endblock %}
-```
-
-FrameworkBundle
----------------
-
- * The default value of the parameter `session`.`cookie_httponly` is now `true`.
- It prevents scripting languages, such as JavaScript to access the cookie,
- which help to reduce identity theft through XSS attacks. If your
- application needs to access the session cookie, override this parameter:
-
- ```yaml
- framework:
- session:
- cookie_httponly: false
- ```
-
-Config
-------
-
-The edge case of defining just one value for nodes of type Enum is now allowed:
-
-```php
-$rootNode
- ->children()
- ->enumNode('variable')
- ->values(array('value'))
- ->end()
- ->end()
-;
-```
-
-Before: `InvalidArgumentException` (variable must contain at least two
-distinct elements).
-After: the code will work as expected and it will restrict the values of the
-`variable` option to just `value`.
diff --git a/UPGRADE-3.0.md b/UPGRADE-3.0.md
index de9a230a55468..731582385a8cf 100644
--- a/UPGRADE-3.0.md
+++ b/UPGRADE-3.0.md
@@ -88,8 +88,14 @@ UPGRADE FROM 2.x to 3.0
$table->render();
```
+* Parameters of `renderException()` method of the
+ `Symfony\Component\Console\Application` are type hinted.
+ You must add the type hint to your implementations.
+
### DependencyInjection
+ * The method `remove` was added to `Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface`.
+
* The methods `Definition::setFactoryClass()`,
`Definition::setFactoryMethod()`, and `Definition::setFactoryService()` have
been removed in favor of `Definition::setFactory()`. Services defined using
@@ -453,6 +459,8 @@ UPGRADE FROM 2.x to 3.0
* The `RouterApacheDumperCommand` was removed.
+ * The `createEsi` method of `Symfony\Bundle\FrameworkBundle\HttpCache\HttpCache` was removed. Use `createSurrogate` instead.
+
* The `templating.helper.router` service was moved to `templating_php.xml`. You
have to ensure that the PHP templating engine is enabled to be able to use it:
@@ -685,6 +693,41 @@ UPGRADE FROM 2.x to 3.0
* The `Translator::setFallbackLocale()` method has been removed in favor of
`Translator::setFallbackLocales()`.
+ * The visibility of the `locale` property has been changed from protected to private. Rely on `getLocale` and `setLocale`
+ instead.
+
+ Before:
+
+ ```php
+ class CustomTranslator extends Translator
+ {
+ public function fooMethod()
+ {
+ // get locale
+ $locale = $this->locale;
+
+ // update locale
+ $this->locale = $locale;
+ }
+ }
+ ```
+
+ After:
+
+ ```php
+ class CustomTranslator extends Translator
+ {
+ public function fooMethod()
+ {
+ // get locale
+ $locale = $this->getLocale();
+
+ // update locale
+ $this->setLocale($locale);
+ }
+ }
+ ```
+
### Twig Bridge
* The `twig:lint` command has been deprecated since Symfony 2.7 and will be
@@ -1201,3 +1244,18 @@ UPGRADE FROM 2.x to 3.0
* `Process::setStdin()` and `Process::getStdin()` have been removed. Use
`Process::setInput()` and `Process::getInput()` that works the same way.
* `Process::setInput()` and `ProcessBuilder::setInput()` do not accept non-scalar types.
+
+### Monolog Bridge
+
+ * `Symfony\Bridge\Monolog\Logger::emerg()` was removed. Use `emergency()` which is PSR-3 compatible.
+ * `Symfony\Bridge\Monolog\Logger::crit()` was removed. Use `critical()` which is PSR-3 compatible.
+ * `Symfony\Bridge\Monolog\Logger::err()` was removed. Use `error()` which is PSR-3 compatible.
+ * `Symfony\Bridge\Monolog\Logger::warn()` was removed. Use `warning()` which is PSR-3 compatible.
+
+### Swiftmailer Bridge
+
+ * `Symfony\Bridge\Swiftmailer\DataCollector\MessageDataCollector` was removed. Use the `Symfony\Bundle\SwiftmailerBundle\DataCollector\MessageDataCollector` class instead.
+
+### HttpFoundation
+
+* `Symfony\Component\HttpFoundation\Session\Flash\FlashBagInterface` no longer implements the `IteratorAggregate` interface. Use the `all()` method instead of iterating over the flash bag.
diff --git a/appveyor.yml b/appveyor.yml
index 2e4d1cce40218..d3ef1e7e53ddd 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -22,25 +22,14 @@ init:
install:
- IF EXIST c:\php (SET PHP=0) ELSE (mkdir c:\php)
- cd c:\php
- - IF %PHP%==1 appveyor DownloadFile http://windows.php.net/downloads/releases/archives/php-5.3.11-nts-Win32-VC9-x86.zip
- - IF %PHP%==1 7z x php-5.3.11-nts-Win32-VC9-x86.zip -y > 7z.log
- - IF %PHP%==1 appveyor DownloadFile http://nebm.ist.utl.pt/~glopes/misc/intl_win/ICU-51.2-dlls.zip
- - IF %PHP%==1 7z x ICU-51.2-dlls.zip -y > 7z.log
- - IF %PHP%==1 cd ext
- - IF %PHP%==1 appveyor DownloadFile http://nebm.ist.utl.pt/~glopes/misc/intl_win/php_intl-3.0.0-5.3-nts-vc9-x86.zip
- - IF %PHP%==1 7z x php_intl-3.0.0-5.3-nts-vc9-x86.zip -y > 7z.log
- - IF %PHP%==1 appveyor DownloadFile http://windows.php.net/downloads/pecl/releases/apc/3.1.13/php_apc-3.1.13-5.3-nts-vc9-x86.zip
- - IF %PHP%==1 7z x php_apc-3.1.13-5.3-nts-vc9-x86.zip -y > 7z.log
- - IF %PHP%==1 appveyor DownloadFile http://windows.php.net/downloads/pecl/releases/memcache/3.0.8/php_memcache-3.0.8-5.3-nts-vc9-x86.zip
- - IF %PHP%==1 7z x php_memcache-3.0.8-5.3-nts-vc9-x86.zip -y > 7z.log
- - IF %PHP%==1 cd ..
+ - IF %PHP%==1 appveyor DownloadFile http://windows.php.net/downloads/releases/archives/php-5.5.9-nts-Win32-VC11-x86.zip
+ - IF %PHP%==1 7z x php-5.5.9-nts-Win32-VC11-x86.zip -y > 7z.log
- IF %PHP%==1 echo @php %%~dp0composer.phar %%* > composer.bat
- appveyor DownloadFile https://getcomposer.org/composer.phar
- copy php.ini-production php.ini /Y
- echo date.timezone="UTC" >> php.ini
- echo extension_dir=ext >> php.ini
- echo extension=php_openssl.dll >> php.ini
- - IF %PHP_EXT%==1 echo extension=php_apc.dll >> php.ini
- IF %PHP_EXT%==1 echo extension=php_intl.dll >> php.ini
- IF %PHP_EXT%==1 echo extension=php_mbstring.dll >> php.ini
- IF %PHP_EXT%==1 echo extension=php_fileinfo.dll >> php.ini
diff --git a/composer.json b/composer.json
index 7c5ea3904c5c2..861b6646050a2 100644
--- a/composer.json
+++ b/composer.json
@@ -16,67 +16,64 @@
}
],
"require": {
- "php": ">=5.3.9",
+ "php": ">=5.5.9",
"doctrine/common": "~2.3",
"twig/twig": "~1.20|~2.0",
- "psr/log": "~1.0",
- "symfony/security-acl": "~2.7"
+ "psr/log": "~1.0"
},
"replace": {
"symfony/asset": "self.version",
"symfony/browser-kit": "self.version",
"symfony/class-loader": "self.version",
- "symfony/config": "self.version",
- "symfony/console": "self.version",
+ "symfony/config": "2.99.99",
+ "symfony/console": "2.99.99",
"symfony/css-selector": "self.version",
- "symfony/dependency-injection": "self.version",
+ "symfony/dependency-injection": "2.99.99",
"symfony/debug": "self.version",
"symfony/debug-bundle": "self.version",
- "symfony/doctrine-bridge": "self.version",
+ "symfony/doctrine-bridge": "2.99.99",
"symfony/dom-crawler": "self.version",
- "symfony/event-dispatcher": "self.version",
- "symfony/expression-language": "self.version",
- "symfony/filesystem": "self.version",
+ "symfony/event-dispatcher": "2.99.99",
+ "symfony/expression-language": "2.99.99",
+ "symfony/filesystem": "2.99.99",
"symfony/finder": "self.version",
"symfony/form": "self.version",
- "symfony/framework-bundle": "self.version",
+ "symfony/framework-bundle": "2.99.99",
"symfony/http-foundation": "self.version",
"symfony/http-kernel": "self.version",
"symfony/intl": "self.version",
- "symfony/locale": "self.version",
"symfony/monolog-bridge": "self.version",
"symfony/options-resolver": "self.version",
- "symfony/process": "self.version",
+ "symfony/process": "2.99.99",
"symfony/property-access": "self.version",
"symfony/proxy-manager-bridge": "self.version",
"symfony/routing": "self.version",
- "symfony/security": "self.version",
+ "symfony/security": "2.99.99",
"symfony/security-core": "self.version",
"symfony/security-csrf": "self.version",
"symfony/security-http": "self.version",
"symfony/security-bundle": "self.version",
"symfony/serializer": "self.version",
- "symfony/stopwatch": "self.version",
- "symfony/swiftmailer-bridge": "self.version",
+ "symfony/stopwatch": "2.99.99",
"symfony/templating": "self.version",
"symfony/translation": "self.version",
"symfony/twig-bridge": "self.version",
"symfony/twig-bundle": "self.version",
- "symfony/validator": "self.version",
+ "symfony/validator": "2.99.99",
"symfony/var-dumper": "self.version",
"symfony/web-profiler-bundle": "self.version",
- "symfony/yaml": "self.version"
+ "symfony/yaml": "2.99.99"
},
"require-dev": {
"symfony/phpunit-bridge": "self.version",
"doctrine/data-fixtures": "1.0.*",
"doctrine/dbal": "~2.2",
"doctrine/orm": "~2.2,>=2.2.3",
- "doctrine/doctrine-bundle": "~1.2",
+ "doctrine/doctrine-bundle": "~1.4",
"monolog/monolog": "~1.11",
- "ircmaxell/password-compat": "~1.0",
"ocramius/proxy-manager": "~0.4|~1.0",
- "egulias/email-validator": "~1.2"
+ "egulias/email-validator": "~1.2",
+ "symfony/security-acl": "~2.8|~3.0"
},
"autoload": {
"psr-4": {
@@ -97,7 +94,7 @@
"minimum-stability": "dev",
"extra": {
"branch-alias": {
- "dev-master": "2.8-dev"
+ "dev-master": "3.0-dev"
}
}
}
diff --git a/src/Symfony/Bridge/Doctrine/Form/Type/DoctrineType.php b/src/Symfony/Bridge/Doctrine/Form/Type/DoctrineType.php
index 223129097d3b3..9e1983c0dc06c 100644
--- a/src/Symfony/Bridge/Doctrine/Form/Type/DoctrineType.php
+++ b/src/Symfony/Bridge/Doctrine/Form/Type/DoctrineType.php
@@ -126,14 +126,7 @@ public function buildForm(FormBuilderInterface $builder, array $options)
public function configureOptions(OptionsResolver $resolver)
{
- $registry = $this->registry;
- $choiceListFactory = $this->choiceListFactory;
- $idReaders = &$this->idReaders;
- $choiceLoaders = &$this->choiceLoaders;
- $type = $this;
-
- $choiceLoader = function (Options $options) use ($choiceListFactory, &$choiceLoaders, $type) {
-
+ $choiceLoader = function (Options $options) {
// Unless the choices are given explicitly, load them on demand
if (null === $options['choices']) {
$hash = null;
@@ -142,7 +135,7 @@ public function configureOptions(OptionsResolver $resolver)
// If there is no QueryBuilder we can safely cache DoctrineChoiceLoader,
// also if concrete Type can return important QueryBuilder parts to generate
// hash key we go for it as well
- if (!$options['query_builder'] || false !== ($qbParts = $type->getQueryBuilderPartsForCachingHash($options['query_builder']))) {
+ if (!$options['query_builder'] || false !== ($qbParts = $this->getQueryBuilderPartsForCachingHash($options['query_builder']))) {
$hash = CachingFactoryDecorator::generateHash(array(
$options['em'],
$options['class'],
@@ -150,22 +143,22 @@ public function configureOptions(OptionsResolver $resolver)
$options['loader'],
));
- if (isset($choiceLoaders[$hash])) {
- return $choiceLoaders[$hash];
+ if (isset($this->choiceLoaders[$hash])) {
+ return $this->choiceLoaders[$hash];
}
}
if ($options['loader']) {
$entityLoader = $options['loader'];
} elseif (null !== $options['query_builder']) {
- $entityLoader = $type->getLoader($options['em'], $options['query_builder'], $options['class']);
+ $entityLoader = $this->getLoader($options['em'], $options['query_builder'], $options['class']);
} else {
$queryBuilder = $options['em']->getRepository($options['class'])->createQueryBuilder('e');
- $entityLoader = $type->getLoader($options['em'], $queryBuilder, $options['class']);
+ $entityLoader = $this->getLoader($options['em'], $queryBuilder, $options['class']);
}
$doctrineChoiceLoader = new DoctrineChoiceLoader(
- $choiceListFactory,
+ $this->choiceListFactory,
$options['em'],
$options['class'],
$options['id_reader'],
@@ -173,7 +166,7 @@ public function configureOptions(OptionsResolver $resolver)
);
if ($hash !== null) {
- $choiceLoaders[$hash] = $doctrineChoiceLoader;
+ $this->choiceLoaders[$hash] = $doctrineChoiceLoader;
}
return $doctrineChoiceLoader;
@@ -220,17 +213,17 @@ public function configureOptions(OptionsResolver $resolver)
// Otherwise, an incrementing integer is used as value automatically
};
- $emNormalizer = function (Options $options, $em) use ($registry) {
+ $emNormalizer = function (Options $options, $em) {
/* @var ManagerRegistry $registry */
if (null !== $em) {
if ($em instanceof ObjectManager) {
return $em;
}
- return $registry->getManager($em);
+ return $this->registry->getManager($em);
}
- $em = $registry->getManagerForClass($options['class']);
+ $em = $this->registry->getManagerForClass($options['class']);
if (null === $em) {
throw new RuntimeException(sprintf(
@@ -273,7 +266,7 @@ public function configureOptions(OptionsResolver $resolver)
// Set the "id_reader" option via the normalizer. This option is not
// supposed to be set by the user.
- $idReaderNormalizer = function (Options $options) use (&$idReaders) {
+ $idReaderNormalizer = function (Options $options) {
$hash = CachingFactoryDecorator::generateHash(array(
$options['em'],
$options['class'],
@@ -285,12 +278,12 @@ public function configureOptions(OptionsResolver $resolver)
// of the field, so we store that information in the reader.
// The reader is cached so that two choice lists for the same class
// (and hence with the same reader) can successfully be cached.
- if (!isset($idReaders[$hash])) {
+ if (!isset($this->idReaders[$hash])) {
$classMetadata = $options['em']->getClassMetadata($options['class']);
- $idReaders[$hash] = new IdReader($options['em'], $classMetadata);
+ $this->idReaders[$hash] = new IdReader($options['em'], $classMetadata);
}
- return $idReaders[$hash];
+ return $this->idReaders[$hash];
};
$resolver->setDefaults(array(
diff --git a/src/Symfony/Bridge/Doctrine/Tests/DependencyInjection/CompilerPass/RegisterEventListenersAndSubscribersPassTest.php b/src/Symfony/Bridge/Doctrine/Tests/DependencyInjection/CompilerPass/RegisterEventListenersAndSubscribersPassTest.php
index 5e53fae965a41..d724f680d8740 100644
--- a/src/Symfony/Bridge/Doctrine/Tests/DependencyInjection/CompilerPass/RegisterEventListenersAndSubscribersPassTest.php
+++ b/src/Symfony/Bridge/Doctrine/Tests/DependencyInjection/CompilerPass/RegisterEventListenersAndSubscribersPassTest.php
@@ -159,8 +159,7 @@ private function process(ContainerBuilder $container)
private function getServiceOrder(ContainerBuilder $container, $method)
{
$order = array();
- foreach ($container->getDefinition('doctrine.dbal.default_connection.event_manager')->getMethodCalls() as $call) {
- list($name, $arguments) = $call;
+ foreach ($container->getDefinition('doctrine.dbal.default_connection.event_manager')->getMethodCalls() as list($name, $arguments)) {
if ($method !== $name) {
continue;
}
diff --git a/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/LegacyUniqueEntityValidatorLegacyApiTest.php b/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/LegacyUniqueEntityValidatorLegacyApiTest.php
deleted file mode 100644
index cde865cc1d87a..0000000000000
--- a/src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/LegacyUniqueEntityValidatorLegacyApiTest.php
+++ /dev/null
@@ -1,28 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Bridge\Doctrine\Tests\Validator\Constraints;
-
-use Symfony\Component\Validator\Validation;
-
-/**
- * @since 2.5.4
- *
- * @author Bernhard Schussek
- * @group legacy
- */
-class LegacyUniqueEntityValidatorLegacyApiTest extends UniqueEntityValidatorTest
-{
- protected function getApiVersion()
- {
- return Validation::API_VERSION_2_5_BC;
- }
-}
diff --git a/src/Symfony/Bridge/Doctrine/composer.json b/src/Symfony/Bridge/Doctrine/composer.json
index 39161c9bdef0a..487e3f8137e05 100644
--- a/src/Symfony/Bridge/Doctrine/composer.json
+++ b/src/Symfony/Bridge/Doctrine/composer.json
@@ -16,20 +16,20 @@
}
],
"require": {
- "php": ">=5.3.9",
+ "php": ">=5.5.9",
"doctrine/common": "~2.3"
},
"require-dev": {
- "symfony/phpunit-bridge": "~2.7|~3.0.0",
- "symfony/stopwatch": "~2.2|~3.0.0",
- "symfony/dependency-injection": "~2.2|~3.0.0",
- "symfony/form": "~2.8|~3.0.0",
- "symfony/http-kernel": "~2.2|~3.0.0",
- "symfony/property-access": "~2.3|~3.0.0",
- "symfony/security": "~2.2|~3.0.0",
- "symfony/expression-language": "~2.2|~3.0.0",
- "symfony/validator": "~2.5,>=2.5.5|~3.0.0",
- "symfony/translation": "~2.0,>=2.0.5|~3.0.0",
+ "symfony/phpunit-bridge": "~2.8|~3.0",
+ "symfony/stopwatch": "~2.8|~3.0",
+ "symfony/dependency-injection": "~2.8|~3.0",
+ "symfony/form": "~2.8|~3.0",
+ "symfony/http-kernel": "~2.8|~3.0",
+ "symfony/property-access": "~2.8|~3.0",
+ "symfony/security": "~2.8|~3.0",
+ "symfony/expression-language": "~2.8|~3.0",
+ "symfony/validator": "~2.8|~3.0",
+ "symfony/translation": "~2.8|~3.0",
"doctrine/data-fixtures": "1.0.*",
"doctrine/dbal": "~2.2",
"doctrine/orm": "~2.2,>=2.2.3"
@@ -47,7 +47,7 @@
"minimum-stability": "dev",
"extra": {
"branch-alias": {
- "dev-master": "2.8-dev"
+ "dev-master": "3.0-dev"
}
}
}
diff --git a/src/Symfony/Bridge/Monolog/CHANGELOG.md b/src/Symfony/Bridge/Monolog/CHANGELOG.md
index 73239fa86b649..cb7deea2e9052 100644
--- a/src/Symfony/Bridge/Monolog/CHANGELOG.md
+++ b/src/Symfony/Bridge/Monolog/CHANGELOG.md
@@ -1,6 +1,12 @@
CHANGELOG
=========
+3.0.0
+-----
+
+ * deprecated interface `Symfony\Component\HttpKernel\Log\LoggerInterface` has been removed
+ * deprecated methods `Logger::crit()`, `Logger::emerg()`, `Logger::err()` and `Logger::warn()` have been removed
+
2.4.0
-----
diff --git a/src/Symfony/Bridge/Monolog/Logger.php b/src/Symfony/Bridge/Monolog/Logger.php
index fbc2f5ff33296..f0e108081b59c 100644
--- a/src/Symfony/Bridge/Monolog/Logger.php
+++ b/src/Symfony/Bridge/Monolog/Logger.php
@@ -12,7 +12,6 @@
namespace Symfony\Bridge\Monolog;
use Monolog\Logger as BaseLogger;
-use Symfony\Component\HttpKernel\Log\LoggerInterface;
use Symfony\Component\HttpKernel\Log\DebugLoggerInterface;
/**
@@ -20,48 +19,8 @@
*
* @author Fabien Potencier
*/
-class Logger extends BaseLogger implements LoggerInterface, DebugLoggerInterface
+class Logger extends BaseLogger implements DebugLoggerInterface
{
- /**
- * @deprecated since version 2.2, to be removed in 3.0. Use emergency() which is PSR-3 compatible.
- */
- public function emerg($message, array $context = array())
- {
- @trigger_error('The '.__METHOD__.' method inherited from the Symfony\Component\HttpKernel\Log\LoggerInterface interface is deprecated since version 2.2 and will be removed in 3.0. Use the emergency() method instead, which is PSR-3 compatible.', E_USER_DEPRECATED);
-
- return parent::addRecord(BaseLogger::EMERGENCY, $message, $context);
- }
-
- /**
- * @deprecated since version 2.2, to be removed in 3.0. Use critical() which is PSR-3 compatible.
- */
- public function crit($message, array $context = array())
- {
- @trigger_error('The '.__METHOD__.' method inherited from the Symfony\Component\HttpKernel\Log\LoggerInterface interface is deprecated since version 2.2 and will be removed in 3.0. Use the method critical() method instead, which is PSR-3 compatible.', E_USER_DEPRECATED);
-
- return parent::addRecord(BaseLogger::CRITICAL, $message, $context);
- }
-
- /**
- * @deprecated since version 2.2, to be removed in 3.0. Use error() which is PSR-3 compatible.
- */
- public function err($message, array $context = array())
- {
- @trigger_error('The '.__METHOD__.' method inherited from the Symfony\Component\HttpKernel\Log\LoggerInterface interface is deprecated since version 2.2 and will be removed in 3.0. Use the error() method instead, which is PSR-3 compatible.', E_USER_DEPRECATED);
-
- return parent::addRecord(BaseLogger::ERROR, $message, $context);
- }
-
- /**
- * @deprecated since version 2.2, to be removed in 3.0. Use warning() which is PSR-3 compatible.
- */
- public function warn($message, array $context = array())
- {
- @trigger_error('The '.__METHOD__.' method inherited from the Symfony\Component\HttpKernel\Log\LoggerInterface interface is deprecated since version 2.2 and will be removed in 3.0. Use the warning() method instead, which is PSR-3 compatible.', E_USER_DEPRECATED);
-
- return parent::addRecord(BaseLogger::WARNING, $message, $context);
- }
-
/**
* {@inheritdoc}
*/
diff --git a/src/Symfony/Bridge/Monolog/Tests/LoggerTest.php b/src/Symfony/Bridge/Monolog/Tests/LoggerTest.php
new file mode 100644
index 0000000000000..903fc12491d53
--- /dev/null
+++ b/src/Symfony/Bridge/Monolog/Tests/LoggerTest.php
@@ -0,0 +1,64 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Bridge\Monolog\Tests;
+
+use Monolog\Handler\TestHandler;
+use Symfony\Bridge\Monolog\Handler\DebugHandler;
+use Symfony\Bridge\Monolog\Logger;
+
+class LoggerTest extends \PHPUnit_Framework_TestCase
+{
+ public function testGetLogsWithDebugHandler()
+ {
+ $handler = new DebugHandler();
+ $logger = new Logger(__METHOD__, array($handler));
+
+ $this->assertTrue($logger->error('error message'));
+ $this->assertSame(1, count($logger->getLogs()));
+ }
+
+ public function testGetLogsWithoutDebugHandler()
+ {
+ $handler = new TestHandler();
+ $logger = new Logger(__METHOD__, array($handler));
+
+ $this->assertTrue($logger->error('error message'));
+ $this->assertSame(array(), $logger->getLogs());
+ }
+
+ public function testCountErrorsWithDebugHandler()
+ {
+ $handler = new DebugHandler();
+ $logger = new Logger(__METHOD__, array($handler));
+
+ $this->assertTrue($logger->debug('test message'));
+ $this->assertTrue($logger->info('test message'));
+ $this->assertTrue($logger->notice('test message'));
+ $this->assertTrue($logger->warning('test message'));
+
+ $this->assertTrue($logger->error('test message'));
+ $this->assertTrue($logger->critical('test message'));
+ $this->assertTrue($logger->alert('test message'));
+ $this->assertTrue($logger->emergency('test message'));
+
+ $this->assertSame(4, $logger->countErrors());
+ }
+
+ public function testCountErrorsWithoutDebugHandler()
+ {
+ $handler = new TestHandler();
+ $logger = new Logger(__METHOD__, array($handler));
+
+ $this->assertTrue($logger->error('error message'));
+ $this->assertSame(0, $logger->countErrors());
+ }
+}
diff --git a/src/Symfony/Bridge/Monolog/composer.json b/src/Symfony/Bridge/Monolog/composer.json
index 61b6ff02d3518..b2c90095073f3 100644
--- a/src/Symfony/Bridge/Monolog/composer.json
+++ b/src/Symfony/Bridge/Monolog/composer.json
@@ -16,14 +16,14 @@
}
],
"require": {
- "php": ">=5.3.9",
+ "php": ">=5.5.9",
"monolog/monolog": "~1.11"
},
"require-dev": {
- "symfony/phpunit-bridge": "~2.7|~3.0.0",
- "symfony/http-kernel": "~2.4|~3.0.0",
- "symfony/console": "~2.4|~3.0.0",
- "symfony/event-dispatcher": "~2.2|~3.0.0"
+ "symfony/phpunit-bridge": "~2.8|~3.0",
+ "symfony/http-kernel": "~2.8|~3.0",
+ "symfony/console": "~2.8|~3.0",
+ "symfony/event-dispatcher": "~2.8|~3.0"
},
"suggest": {
"symfony/http-kernel": "For using the debugging handlers together with the response life cycle of the HTTP kernel.",
@@ -36,7 +36,7 @@
"minimum-stability": "dev",
"extra": {
"branch-alias": {
- "dev-master": "2.8-dev"
+ "dev-master": "3.0-dev"
}
}
}
diff --git a/src/Symfony/Bridge/PhpUnit/DeprecationErrorHandler.php b/src/Symfony/Bridge/PhpUnit/DeprecationErrorHandler.php
index 42d88b030d5b2..36661f363778f 100644
--- a/src/Symfony/Bridge/PhpUnit/DeprecationErrorHandler.php
+++ b/src/Symfony/Bridge/PhpUnit/DeprecationErrorHandler.php
@@ -40,7 +40,7 @@ public static function register($mode = false)
return \PHPUnit_Util_ErrorHandler::handleError($type, $msg, $file, $line, $context);
}
- $trace = debug_backtrace(PHP_VERSION_ID >= 50400 ? DEBUG_BACKTRACE_IGNORE_ARGS | DEBUG_BACKTRACE_PROVIDE_OBJECT : true);
+ $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS | DEBUG_BACKTRACE_PROVIDE_OBJECT);
$i = count($trace);
while (isset($trace[--$i]['class']) && ('ReflectionMethod' === $trace[$i]['class'] || 0 === strpos($trace[$i]['class'], 'PHPUnit_'))) {
diff --git a/src/Symfony/Bridge/PhpUnit/bootstrap.php b/src/Symfony/Bridge/PhpUnit/bootstrap.php
index 199186fa4f029..75a4b68ad36de 100644
--- a/src/Symfony/Bridge/PhpUnit/bootstrap.php
+++ b/src/Symfony/Bridge/PhpUnit/bootstrap.php
@@ -8,11 +8,9 @@
return;
}
-if (PHP_VERSION_ID >= 50400 && gc_enabled()) {
- // Disabling Zend Garbage Collection to prevent segfaults with PHP5.4+
- // https://bugs.php.net/bug.php?id=53976
- gc_disable();
-}
+// Disabling Zend Garbage Collection to prevent segfaults with PHP5.4+
+// https://bugs.php.net/bug.php?id=53976
+gc_disable();
// Enforce a consistent locale
setlocale(LC_ALL, 'C');
diff --git a/src/Symfony/Bridge/PhpUnit/composer.json b/src/Symfony/Bridge/PhpUnit/composer.json
index 90ac8e5d9dd19..a2bd57fe07fd8 100644
--- a/src/Symfony/Bridge/PhpUnit/composer.json
+++ b/src/Symfony/Bridge/PhpUnit/composer.json
@@ -16,7 +16,7 @@
}
],
"require": {
- "php": ">=5.3.3"
+ "php": ">=5.5.9"
},
"suggest": {
"symfony/debug": "For tracking deprecated interfaces usages at runtime with DebugClassLoader"
@@ -28,7 +28,7 @@
"minimum-stability": "dev",
"extra": {
"branch-alias": {
- "dev-master": "2.8-dev"
+ "dev-master": "3.0-dev"
}
}
}
diff --git a/src/Symfony/Bridge/ProxyManager/LazyProxy/PhpDumper/ProxyDumper.php b/src/Symfony/Bridge/ProxyManager/LazyProxy/PhpDumper/ProxyDumper.php
index 076484567aae6..8cca8eec090e3 100644
--- a/src/Symfony/Bridge/ProxyManager/LazyProxy/PhpDumper/ProxyDumper.php
+++ b/src/Symfony/Bridge/ProxyManager/LazyProxy/PhpDumper/ProxyDumper.php
@@ -79,11 +79,10 @@ public function getProxyFactoryCode(Definition $definition, $id)
return <<$methodName(false);
+ function (&\$wrappedInstance, \ProxyManager\Proxy\LazyLoadingInterface \$proxy) {
+ \$wrappedInstance = \$this->$methodName(false);
\$proxy->setProxyInitializer(null);
diff --git a/src/Symfony/Bridge/ProxyManager/Tests/LazyProxy/Fixtures/php/lazy_service.php b/src/Symfony/Bridge/ProxyManager/Tests/LazyProxy/Fixtures/php/lazy_service.php
index 69e1b9b3e7016..da3be4997c3f9 100644
--- a/src/Symfony/Bridge/ProxyManager/Tests/LazyProxy/Fixtures/php/lazy_service.php
+++ b/src/Symfony/Bridge/ProxyManager/Tests/LazyProxy/Fixtures/php/lazy_service.php
@@ -43,11 +43,10 @@ public function __construct()
public function getFooService($lazyLoad = true)
{
if ($lazyLoad) {
- $container = $this;
return $this->services['foo'] = new stdClass_c1d194250ee2e2b7d2eab8b8212368a8(
- function (&$wrappedInstance, \ProxyManager\Proxy\LazyLoadingInterface $proxy) use ($container) {
- $wrappedInstance = $container->getFooService(false);
+ function (&$wrappedInstance, \ProxyManager\Proxy\LazyLoadingInterface $proxy) {
+ $wrappedInstance = $this->getFooService(false);
$proxy->setProxyInitializer(null);
diff --git a/src/Symfony/Bridge/ProxyManager/Tests/LazyProxy/Fixtures/php/lazy_service_structure.txt b/src/Symfony/Bridge/ProxyManager/Tests/LazyProxy/Fixtures/php/lazy_service_structure.txt
index 332370c87eb11..7bd36c13ef6a2 100644
--- a/src/Symfony/Bridge/ProxyManager/Tests/LazyProxy/Fixtures/php/lazy_service_structure.txt
+++ b/src/Symfony/Bridge/ProxyManager/Tests/LazyProxy/Fixtures/php/lazy_service_structure.txt
@@ -6,11 +6,10 @@ class ProjectServiceContainer extends Container
public function getFooService($lazyLoad = true)
{
if ($lazyLoad) {
- $container = $this;
return $this->services['foo'] = new stdClass_%s(
- function (&$wrappedInstance, \ProxyManager\Proxy\LazyLoadingInterface $proxy) use ($container) {
- $wrappedInstance = $container->getFooService(false);
+ function (&$wrappedInstance, \ProxyManager\Proxy\LazyLoadingInterface $proxy) {
+ $wrappedInstance = $this->getFooService(false);
$proxy->setProxyInitializer(null);
@@ -24,4 +23,4 @@ class ProjectServiceContainer extends Container
}
class stdClass_%s extends \stdClass implements \ProxyManager\Proxy\VirtualProxyInterface
-{%a}%A
\ No newline at end of file
+{%a}%A
diff --git a/src/Symfony/Bridge/ProxyManager/Tests/LazyProxy/PhpDumper/ProxyDumperTest.php b/src/Symfony/Bridge/ProxyManager/Tests/LazyProxy/PhpDumper/ProxyDumperTest.php
index 8ef46b4d962fe..35303d264f1a0 100644
--- a/src/Symfony/Bridge/ProxyManager/Tests/LazyProxy/PhpDumper/ProxyDumperTest.php
+++ b/src/Symfony/Bridge/ProxyManager/Tests/LazyProxy/PhpDumper/ProxyDumperTest.php
@@ -71,10 +71,10 @@ public function testGetProxyFactoryCode()
$code = $this->dumper->getProxyFactoryCode($definition, 'foo');
$this->assertStringMatchesFormat(
- '%wif ($lazyLoad) {%w$container = $this;%wreturn $this->services[\'foo\'] = new '
+ '%wif ($lazyLoad) {%wreturn $this->services[\'foo\'] = new '
.'SymfonyBridgeProxyManagerTestsLazyProxyPhpDumperProxyDumperTest_%s(%wfunction '
- .'(&$wrappedInstance, \ProxyManager\Proxy\LazyLoadingInterface $proxy) use ($container) {'
- .'%w$wrappedInstance = $container->getFooService(false);%w$proxy->setProxyInitializer(null);'
+ .'(&$wrappedInstance, \ProxyManager\Proxy\LazyLoadingInterface $proxy) {'
+ .'%w$wrappedInstance = $this->getFooService(false);%w$proxy->setProxyInitializer(null);'
.'%wreturn true;%w}%w);%w}%w',
$code
);
diff --git a/src/Symfony/Bridge/ProxyManager/composer.json b/src/Symfony/Bridge/ProxyManager/composer.json
index b37bf7b875759..cb4e89969ca17 100644
--- a/src/Symfony/Bridge/ProxyManager/composer.json
+++ b/src/Symfony/Bridge/ProxyManager/composer.json
@@ -16,13 +16,13 @@
}
],
"require": {
- "php": ">=5.3.9",
- "symfony/dependency-injection": "~2.8|~3.0.0",
+ "php": ">=5.5.9",
+ "symfony/dependency-injection": "~2.8|~3.0",
"ocramius/proxy-manager": "~0.4|~1.0"
},
"require-dev": {
- "symfony/phpunit-bridge": "~2.7|~3.0.0",
- "symfony/config": "~2.3|~3.0.0"
+ "symfony/phpunit-bridge": "~2.8|~3.0",
+ "symfony/config": "~2.8|~3.0"
},
"autoload": {
"psr-4": { "Symfony\\Bridge\\ProxyManager\\": "" }
@@ -30,7 +30,7 @@
"minimum-stability": "dev",
"extra": {
"branch-alias": {
- "dev-master": "2.8-dev"
+ "dev-master": "3.0-dev"
}
}
}
diff --git a/src/Symfony/Bridge/Swiftmailer/.gitignore b/src/Symfony/Bridge/Swiftmailer/.gitignore
deleted file mode 100644
index c49a5d8df5c65..0000000000000
--- a/src/Symfony/Bridge/Swiftmailer/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-vendor/
-composer.lock
-phpunit.xml
diff --git a/src/Symfony/Bridge/Swiftmailer/CHANGELOG.md b/src/Symfony/Bridge/Swiftmailer/CHANGELOG.md
deleted file mode 100644
index 67100f8b06a5e..0000000000000
--- a/src/Symfony/Bridge/Swiftmailer/CHANGELOG.md
+++ /dev/null
@@ -1,7 +0,0 @@
-CHANGELOG
-=========
-
-2.1.0
------
-
- * added a data collector
diff --git a/src/Symfony/Bridge/Swiftmailer/DataCollector/MessageDataCollector.php b/src/Symfony/Bridge/Swiftmailer/DataCollector/MessageDataCollector.php
deleted file mode 100644
index 9e1d75ee9401f..0000000000000
--- a/src/Symfony/Bridge/Swiftmailer/DataCollector/MessageDataCollector.php
+++ /dev/null
@@ -1,90 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Bridge\Swiftmailer\DataCollector;
-
-@trigger_error(__CLASS__.' class is deprecated since version 2.4 and will be removed in 3.0. Use the Symfony\Bundle\SwiftmailerBundle\DataCollector\MessageDataCollector class from SwiftmailerBundle instead. Require symfony/swiftmailer-bundle package to download SwiftmailerBundle with Composer.', E_USER_DEPRECATED);
-
-use Symfony\Component\HttpKernel\DataCollector\DataCollector;
-use Symfony\Component\HttpFoundation\Request;
-use Symfony\Component\HttpFoundation\Response;
-use Symfony\Component\DependencyInjection\ContainerInterface;
-
-/**
- * MessageDataCollector.
- *
- * @author Fabien Potencier
- * @author Clément JOBEILI
- *
- * @deprecated since version 2.4, to be removed in 3.0.
- * Use the MessageDataCollector from SwiftmailerBundle instead.
- */
-class MessageDataCollector extends DataCollector
-{
- private $container;
- private $isSpool;
-
- /**
- * Constructor.
- *
- * We don't inject the message logger and mailer here
- * to avoid the creation of these objects when no emails are sent.
- *
- * @param ContainerInterface $container A ContainerInterface instance
- * @param bool $isSpool
- */
- public function __construct(ContainerInterface $container, $isSpool)
- {
- $this->container = $container;
- $this->isSpool = $isSpool;
- }
-
- /**
- * {@inheritdoc}
- */
- public function collect(Request $request, Response $response, \Exception $exception = null)
- {
- // only collect when Swiftmailer has already been initialized
- if (class_exists('Swift_Mailer', false)) {
- $logger = $this->container->get('swiftmailer.plugin.messagelogger');
- $this->data['messages'] = $logger->getMessages();
- $this->data['messageCount'] = $logger->countMessages();
- } else {
- $this->data['messages'] = array();
- $this->data['messageCount'] = 0;
- }
-
- $this->data['isSpool'] = $this->isSpool;
- }
-
- public function getMessageCount()
- {
- return $this->data['messageCount'];
- }
-
- public function getMessages()
- {
- return $this->data['messages'];
- }
-
- public function isSpool()
- {
- return $this->data['isSpool'];
- }
-
- /**
- * {@inheritdoc}
- */
- public function getName()
- {
- return 'swiftmailer';
- }
-}
diff --git a/src/Symfony/Bridge/Swiftmailer/LICENSE b/src/Symfony/Bridge/Swiftmailer/LICENSE
deleted file mode 100644
index 43028bc600f26..0000000000000
--- a/src/Symfony/Bridge/Swiftmailer/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2004-2015 Fabien Potencier
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is furnished
-to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/src/Symfony/Bridge/Swiftmailer/composer.json b/src/Symfony/Bridge/Swiftmailer/composer.json
deleted file mode 100644
index 3e5fcc3bf837a..0000000000000
--- a/src/Symfony/Bridge/Swiftmailer/composer.json
+++ /dev/null
@@ -1,37 +0,0 @@
-{
- "name": "symfony/swiftmailer-bridge",
- "type": "symfony-bridge",
- "description": "Symfony Swiftmailer Bridge",
- "keywords": [],
- "homepage": "https://symfony.com",
- "license": "MIT",
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "require": {
- "php": ">=5.3.9",
- "swiftmailer/swiftmailer": ">=4.2.0,<6.0-dev"
- },
- "require-dev": {
- "symfony/phpunit-bridge": "~2.7|~3.0.0"
- },
- "suggest": {
- "symfony/http-kernel": ""
- },
- "autoload": {
- "psr-4": { "Symfony\\Bridge\\Swiftmailer\\": "" }
- },
- "minimum-stability": "dev",
- "extra": {
- "branch-alias": {
- "dev-master": "2.8-dev"
- }
- }
-}
diff --git a/src/Symfony/Bridge/Twig/AppVariable.php b/src/Symfony/Bridge/Twig/AppVariable.php
index 88d9835ce2399..6657abf27caf5 100644
--- a/src/Symfony/Bridge/Twig/AppVariable.php
+++ b/src/Symfony/Bridge/Twig/AppVariable.php
@@ -15,8 +15,6 @@
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
-use Symfony\Component\Security\Core\SecurityContext;
-use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Exposes some Symfony parameters and services as an "app" global variable.
@@ -25,20 +23,11 @@
*/
class AppVariable
{
- private $container;
private $tokenStorage;
private $requestStack;
private $environment;
private $debug;
- /**
- * @deprecated since version 2.7, to be removed in 3.0.
- */
- public function setContainer(ContainerInterface $container)
- {
- $this->container = $container;
- }
-
public function setTokenStorage(TokenStorageInterface $tokenStorage)
{
$this->tokenStorage = $tokenStorage;
@@ -59,26 +48,6 @@ public function setDebug($debug)
$this->debug = (bool) $debug;
}
- /**
- * Returns the security context service.
- *
- * @deprecated since version 2.6, to be removed in 3.0.
- *
- * @return SecurityContext|null The security context
- */
- public function getSecurity()
- {
- @trigger_error('The "app.security" variable is deprecated since version 2.6 and will be removed in 3.0.', E_USER_DEPRECATED);
-
- if (null === $this->container) {
- throw new \RuntimeException('The "app.security" variable is not available.');
- }
-
- if ($this->container->has('security.context')) {
- return $this->container->get('security.context');
- }
- }
-
/**
* Returns the current user.
*
@@ -88,17 +57,13 @@ public function getSecurity()
*/
public function getUser()
{
- if (null === $this->tokenStorage) {
- if (null === $this->container) {
- throw new \RuntimeException('The "app.user" variable is not available.');
- } elseif (!$this->container->has('security.context')) {
- return;
- }
-
- $this->tokenStorage = $this->container->get('security.context');
+ if (null !== $this->tokenStorage) {
+ $tokenStorage = $this->tokenStorage;
+ } else {
+ throw new \RuntimeException('The "app.user" variable is not available.');
}
- if (!$token = $this->tokenStorage->getToken()) {
+ if (!$token = $tokenStorage->getToken()) {
return;
}
@@ -116,11 +81,7 @@ public function getUser()
public function getRequest()
{
if (null === $this->requestStack) {
- if (null === $this->container) {
- throw new \RuntimeException('The "app.request" variable is not available.');
- }
-
- $this->requestStack = $this->container->get('request_stack');
+ throw new \RuntimeException('The "app.request" variable is not available.');
}
return $this->requestStack->getCurrentRequest();
@@ -133,7 +94,7 @@ public function getRequest()
*/
public function getSession()
{
- if (null === $this->requestStack && null === $this->container) {
+ if (null === $this->requestStack) {
throw new \RuntimeException('The "app.session" variable is not available.');
}
diff --git a/src/Symfony/Bridge/Twig/Command/LintCommand.php b/src/Symfony/Bridge/Twig/Command/LintCommand.php
index 8cbf3c062ee2a..83dea8d465342 100644
--- a/src/Symfony/Bridge/Twig/Command/LintCommand.php
+++ b/src/Symfony/Bridge/Twig/Command/LintCommand.php
@@ -57,7 +57,6 @@ protected function getTwigEnvironment()
protected function configure()
{
$this
- ->setAliases(array('twig:lint'))
->setDescription('Lints a template and outputs encountered errors')
->addOption('format', null, InputOption::VALUE_REQUIRED, 'The output format', 'txt')
->addArgument('filename', InputArgument::IS_ARRAY)
@@ -84,10 +83,6 @@ protected function configure()
protected function execute(InputInterface $input, OutputInterface $output)
{
- if (false !== strpos($input->getFirstArgument(), ':l')) {
- $output->writeln('The use of "twig:lint" command is deprecated since version 2.7 and will be removed in 3.0. Use the "lint:twig" instead. ');
- }
-
$twig = $this->getTwigEnvironment();
if (null === $twig) {
@@ -201,7 +196,7 @@ private function displayJson(OutputInterface $output, $filesInfo)
}
});
- $output->writeln(json_encode($filesInfo, defined('JSON_PRETTY_PRINT') ? JSON_PRETTY_PRINT : 0));
+ $output->writeln(json_encode($filesInfo, JSON_PRETTY_PRINT));
return min($errors, 1);
}
diff --git a/src/Symfony/Bridge/Twig/Extension/AssetExtension.php b/src/Symfony/Bridge/Twig/Extension/AssetExtension.php
index d90d13f6fd3d4..f599a9eb5c9b6 100644
--- a/src/Symfony/Bridge/Twig/Extension/AssetExtension.php
+++ b/src/Symfony/Bridge/Twig/Extension/AssetExtension.php
@@ -12,7 +12,6 @@
namespace Symfony\Bridge\Twig\Extension;
use Symfony\Component\Asset\Packages;
-use Symfony\Component\Asset\VersionStrategy\StaticVersionStrategy;
/**
* Twig extension for the Symfony Asset component.
@@ -22,16 +21,10 @@
class AssetExtension extends \Twig_Extension
{
private $packages;
- private $foundationExtension;
- /**
- * Passing an HttpFoundationExtension instance as a second argument must not be relied on
- * as it's only there to maintain BC with older Symfony version. It will be removed in 3.0.
- */
- public function __construct(Packages $packages, HttpFoundationExtension $foundationExtension = null)
+ public function __construct(Packages $packages)
{
$this->packages = $packages;
- $this->foundationExtension = $foundationExtension;
}
/**
@@ -42,7 +35,6 @@ public function getFunctions()
return array(
new \Twig_SimpleFunction('asset', array($this, 'getAssetUrl')),
new \Twig_SimpleFunction('asset_version', array($this, 'getAssetVersion')),
- new \Twig_SimpleFunction('assets_version', array($this, 'getAssetsVersion'), array('deprecated' => true, 'alternative' => 'asset_version')),
);
}
@@ -57,20 +49,8 @@ public function getFunctions()
*
* @return string The public path of the asset
*/
- public function getAssetUrl($path, $packageName = null, $absolute = false, $version = null)
+ public function getAssetUrl($path, $packageName = null)
{
- // BC layer to be removed in 3.0
- if (2 < $count = func_num_args()) {
- @trigger_error('Generating absolute URLs with the Twig asset() function was deprecated in 2.7 and will be removed in 3.0. Please use absolute_url() instead.', E_USER_DEPRECATED);
- if (4 === $count) {
- @trigger_error('Forcing a version with the Twig asset() function was deprecated in 2.7 and will be removed in 3.0.', E_USER_DEPRECATED);
- }
-
- $args = func_get_args();
-
- return $this->getLegacyAssetUrl($path, $packageName, $args[2], isset($args[3]) ? $args[3] : null);
- }
-
return $this->packages->getUrl($path, $packageName);
}
@@ -87,59 +67,6 @@ public function getAssetVersion($path, $packageName = null)
return $this->packages->getVersion($path, $packageName);
}
- public function getAssetsVersion($packageName = null)
- {
- @trigger_error('The Twig assets_version() function was deprecated in 2.7 and will be removed in 3.0. Please use asset_version() instead.', E_USER_DEPRECATED);
-
- return $this->packages->getVersion('/', $packageName);
- }
-
- private function getLegacyAssetUrl($path, $packageName = null, $absolute = false, $version = null)
- {
- if ($version) {
- $package = $this->packages->getPackage($packageName);
- $class = new \ReflectionClass($package);
-
- while ('Symfony\Component\Asset\Package' !== $class->getName()) {
- $class = $class->getParentClass();
- }
-
- $v = $class->getProperty('versionStrategy');
- $v->setAccessible(true);
- $currentVersionStrategy = $v->getValue($package);
-
- if (property_exists($currentVersionStrategy, 'format')) {
- $f = new \ReflectionProperty($currentVersionStrategy, 'format');
- $f->setAccessible(true);
- $format = $f->getValue($currentVersionStrategy);
-
- $v->setValue($package, new StaticVersionStrategy($version, $format));
- } else {
- $v->setValue($package, new StaticVersionStrategy($version));
- }
- }
-
- try {
- $url = $this->packages->getUrl($path, $packageName);
- } catch (\Exception $e) {
- if ($version) {
- $v->setValue($package, $currentVersionStrategy);
- }
-
- throw $e;
- }
-
- if ($version) {
- $v->setValue($package, $currentVersionStrategy);
- }
-
- if ($absolute) {
- return $this->foundationExtension->generateAbsoluteUrl($url);
- }
-
- return $url;
- }
-
/**
* Returns the name of the extension.
*
diff --git a/src/Symfony/Bridge/Twig/Extension/CodeExtension.php b/src/Symfony/Bridge/Twig/Extension/CodeExtension.php
index b7c3605d9572f..5ec74b0a96788 100644
--- a/src/Symfony/Bridge/Twig/Extension/CodeExtension.php
+++ b/src/Symfony/Bridge/Twig/Extension/CodeExtension.php
@@ -174,11 +174,7 @@ public function formatFile($file, $line, $text = null)
$text = "$text at line $line";
if (false !== $link = $this->getFileLink($file, $line)) {
- if (PHP_VERSION_ID >= 50400) {
- $flags = ENT_QUOTES | ENT_SUBSTITUTE;
- } else {
- $flags = ENT_QUOTES;
- }
+ $flags = ENT_QUOTES | ENT_SUBSTITUTE;
return sprintf('%s ', htmlspecialchars($link, $flags, $this->charset), $text);
}
@@ -205,10 +201,8 @@ public function getFileLink($file, $line)
public function formatFileFromText($text)
{
- $that = $this;
-
- return preg_replace_callback('/in ("|")?(.+?)\1(?: +(?:on|at))? +line (\d+)/s', function ($match) use ($that) {
- return 'in '.$that->formatFile($match[2], $match[3]);
+ return preg_replace_callback('/in ("|")?(.+?)\1(?: +(?:on|at))? +line (\d+)/s', function ($match) {
+ return 'in '.$this->formatFile($match[2], $match[3]);
}, $text);
}
diff --git a/src/Symfony/Bridge/Twig/Extension/FormExtension.php b/src/Symfony/Bridge/Twig/Extension/FormExtension.php
index 924d49d581863..055ba7e55fe26 100644
--- a/src/Symfony/Bridge/Twig/Extension/FormExtension.php
+++ b/src/Symfony/Bridge/Twig/Extension/FormExtension.php
@@ -61,7 +61,6 @@ public function getTokenParsers()
public function getFunctions()
{
return array(
- new \Twig_SimpleFunction('form_enctype', null, array('node_class' => 'Symfony\Bridge\Twig\Node\FormEnctypeNode', 'is_safe' => array('html'), 'deprecated' => true, 'alternative' => 'form_start')),
new \Twig_SimpleFunction('form_widget', null, array('node_class' => 'Symfony\Bridge\Twig\Node\SearchAndRenderBlockNode', 'is_safe' => array('html'))),
new \Twig_SimpleFunction('form_errors', null, array('node_class' => 'Symfony\Bridge\Twig\Node\SearchAndRenderBlockNode', 'is_safe' => array('html'))),
new \Twig_SimpleFunction('form_label', null, array('node_class' => 'Symfony\Bridge\Twig\Node\SearchAndRenderBlockNode', 'is_safe' => array('html'))),
diff --git a/src/Symfony/Bridge/Twig/Node/FormEnctypeNode.php b/src/Symfony/Bridge/Twig/Node/FormEnctypeNode.php
deleted file mode 100644
index 14811e6d97492..0000000000000
--- a/src/Symfony/Bridge/Twig/Node/FormEnctypeNode.php
+++ /dev/null
@@ -1,21 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Bridge\Twig\Node;
-
-/**
- * @author Bernhard Schussek
- *
- * @deprecated since version 2.3, to be removed in 3.0. Use the helper "form_start()" instead.
- */
-class FormEnctypeNode extends SearchAndRenderBlockNode
-{
-}
diff --git a/src/Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig b/src/Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig
index 18110fb56beb6..96f405fa2efb9 100644
--- a/src/Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig
+++ b/src/Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig
@@ -287,10 +287,6 @@
{%- endblock form_end -%}
-{%- block form_enctype -%}
- {% if multipart %}enctype="multipart/form-data"{% endif %}
-{%- endblock form_enctype -%}
-
{%- block form_errors -%}
{%- if errors|length > 0 -%}
diff --git a/src/Symfony/Bridge/Twig/Tests/Extension/AssetExtensionTest.php b/src/Symfony/Bridge/Twig/Tests/Extension/AssetExtensionTest.php
deleted file mode 100644
index 474d8c33956b7..0000000000000
--- a/src/Symfony/Bridge/Twig/Tests/Extension/AssetExtensionTest.php
+++ /dev/null
@@ -1,66 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Bridge\Twig\Tests\Extension;
-
-use Symfony\Bridge\Twig\Extension\AssetExtension;
-use Symfony\Component\Asset\Package;
-use Symfony\Component\Asset\Packages;
-use Symfony\Component\Asset\PathPackage;
-use Symfony\Component\Asset\VersionStrategy\EmptyVersionStrategy;
-use Symfony\Component\Asset\VersionStrategy\StaticVersionStrategy;
-
-class AssetExtensionTest extends \PHPUnit_Framework_TestCase
-{
- /**
- * @group legacy
- */
- public function testLegacyGetAssetUrl()
- {
- $extension = $this->createExtension(new Package(new StaticVersionStrategy('22', '%s?version=%s')));
-
- $this->assertEquals('me.png?version=42', $extension->getAssetUrl('me.png', null, false, '42'));
- $this->assertEquals('http://localhost/me.png?version=22', $extension->getAssetUrl('me.png', null, true));
- $this->assertEquals('http://localhost/me.png?version=42', $extension->getAssetUrl('me.png', null, true, '42'));
- }
-
- /**
- * @group legacy
- */
- public function testGetAssetUrlWithPackageSubClass()
- {
- $extension = $this->createExtension(new PathPackage('foo', new StaticVersionStrategy('22', '%s?version=%s')));
-
- $this->assertEquals('/foo/me.png?version=42', $extension->getAssetUrl('me.png', null, false, 42));
- }
-
- /**
- * @group legacy
- */
- public function testGetAssetUrlWithEmptyVersionStrategy()
- {
- $extension = $this->createExtension(new PathPackage('foo', new EmptyVersionStrategy()));
-
- $this->assertEquals('/foo/me.png?42', $extension->getAssetUrl('me.png', null, false, 42));
- }
-
- private function createExtension(Package $package)
- {
- $foundationExtension = $this->getMockBuilder('Symfony\Bridge\Twig\Extension\HttpFoundationExtension')->disableOriginalConstructor()->getMock();
- $foundationExtension
- ->expects($this->any())
- ->method('generateAbsoluteUrl')
- ->will($this->returnCallback(function ($arg) { return 'http://localhost/'.$arg; }))
- ;
-
- return new AssetExtension(new Packages($package), $foundationExtension);
- }
-}
diff --git a/src/Symfony/Bridge/Twig/Tests/Extension/FormExtensionBootstrap3LayoutTest.php b/src/Symfony/Bridge/Twig/Tests/Extension/FormExtensionBootstrap3LayoutTest.php
index 8e76552697539..7aae0f12a67db 100644
--- a/src/Symfony/Bridge/Twig/Tests/Extension/FormExtensionBootstrap3LayoutTest.php
+++ b/src/Symfony/Bridge/Twig/Tests/Extension/FormExtensionBootstrap3LayoutTest.php
@@ -27,10 +27,6 @@ class FormExtensionBootstrap3LayoutTest extends AbstractBootstrap3LayoutTest
*/
protected $extension;
- protected $testableFeatures = array(
- 'choice_attr',
- );
-
protected function setUp()
{
parent::setUp();
@@ -67,11 +63,6 @@ protected function renderForm(FormView $view, array $vars = array())
return (string) $this->extension->renderer->renderBlock($view, 'form', $vars);
}
- protected function renderEnctype(FormView $view)
- {
- return (string) $this->extension->renderer->searchAndRenderBlock($view, 'enctype');
- }
-
protected function renderLabel(FormView $view, $label = null, array $vars = array())
{
if ($label !== null) {
diff --git a/src/Symfony/Bridge/Twig/Tests/Extension/FormExtensionDivLayoutTest.php b/src/Symfony/Bridge/Twig/Tests/Extension/FormExtensionDivLayoutTest.php
index e720836c9558a..14b53ecd8f2b4 100644
--- a/src/Symfony/Bridge/Twig/Tests/Extension/FormExtensionDivLayoutTest.php
+++ b/src/Symfony/Bridge/Twig/Tests/Extension/FormExtensionDivLayoutTest.php
@@ -28,10 +28,6 @@ class FormExtensionDivLayoutTest extends AbstractDivLayoutTest
*/
protected $extension;
- protected $testableFeatures = array(
- 'choice_attr',
- );
-
protected function setUp()
{
parent::setUp();
@@ -110,17 +106,10 @@ public function testThemeBlockInheritanceUsingDynamicExtend()
public function isSelectedChoiceProvider()
{
- // The commented cases should not be necessary anymore, because the
- // choice lists should assure that both values passed here are always
- // strings
return array(
-// array(true, 0, 0),
array(true, '0', '0'),
array(true, '1', '1'),
-// array(true, false, 0),
-// array(true, true, 1),
array(true, '', ''),
-// array(true, null, ''),
array(true, '1.23', '1.23'),
array(true, 'foo', 'foo'),
array(true, 'foo10', 'foo10'),
@@ -146,11 +135,6 @@ protected function renderForm(FormView $view, array $vars = array())
return (string) $this->extension->renderer->renderBlock($view, 'form', $vars);
}
- protected function renderEnctype(FormView $view)
- {
- return (string) $this->extension->renderer->searchAndRenderBlock($view, 'enctype');
- }
-
protected function renderLabel(FormView $view, $label = null, array $vars = array())
{
if ($label !== null) {
diff --git a/src/Symfony/Bridge/Twig/Tests/Extension/FormExtensionTableLayoutTest.php b/src/Symfony/Bridge/Twig/Tests/Extension/FormExtensionTableLayoutTest.php
index f8f3ddf3e5bce..47a29cd612655 100644
--- a/src/Symfony/Bridge/Twig/Tests/Extension/FormExtensionTableLayoutTest.php
+++ b/src/Symfony/Bridge/Twig/Tests/Extension/FormExtensionTableLayoutTest.php
@@ -27,10 +27,6 @@ class FormExtensionTableLayoutTest extends AbstractTableLayoutTest
*/
protected $extension;
- protected $testableFeatures = array(
- 'choice_attr',
- );
-
protected function setUp()
{
parent::setUp();
@@ -68,11 +64,6 @@ protected function renderForm(FormView $view, array $vars = array())
return (string) $this->extension->renderer->renderBlock($view, 'form', $vars);
}
- protected function renderEnctype(FormView $view)
- {
- return (string) $this->extension->renderer->searchAndRenderBlock($view, 'enctype');
- }
-
protected function renderLabel(FormView $view, $label = null, array $vars = array())
{
if ($label !== null) {
diff --git a/src/Symfony/Bridge/Twig/Tests/Node/DumpNodeTest.php b/src/Symfony/Bridge/Twig/Tests/Node/DumpNodeTest.php
index 2553b9ea2ab44..8e5b933c81da7 100644
--- a/src/Symfony/Bridge/Twig/Tests/Node/DumpNodeTest.php
+++ b/src/Symfony/Bridge/Twig/Tests/Node/DumpNodeTest.php
@@ -80,7 +80,7 @@ public function testOneVar()
}
EOTXT;
- $expected = preg_replace('/%(.*?)%/', version_compare(PHP_VERSION, '5.4.0') >= 0 ? '(isset($context["$1"]) ? $context["$1"] : null)' : '$this->getContext($context, "$1")', $expected);
+ $expected = preg_replace('/%(.*?)%/', '(isset($context["$1"]) ? $context["$1"] : null)', $expected);
$this->assertSame($expected, $compiler->compile($node)->getSource());
}
@@ -106,7 +106,7 @@ public function testMultiVars()
}
EOTXT;
- $expected = preg_replace('/%(.*?)%/', version_compare(PHP_VERSION, '5.4.0') >= 0 ? '(isset($context["$1"]) ? $context["$1"] : null)' : '$this->getContext($context, "$1")', $expected);
+ $expected = preg_replace('/%(.*?)%/', '(isset($context["$1"]) ? $context["$1"] : null)', $expected);
$this->assertSame($expected, $compiler->compile($node)->getSource());
}
diff --git a/src/Symfony/Bridge/Twig/Tests/Node/FormThemeTest.php b/src/Symfony/Bridge/Twig/Tests/Node/FormThemeTest.php
index 0fadfdabc6e77..3d62ce68809ba 100644
--- a/src/Symfony/Bridge/Twig/Tests/Node/FormThemeTest.php
+++ b/src/Symfony/Bridge/Twig/Tests/Node/FormThemeTest.php
@@ -66,10 +66,6 @@ public function testCompile()
protected function getVariableGetter($name)
{
- if (PHP_VERSION_ID >= 50400) {
- return sprintf('(isset($context["%s"]) ? $context["%s"] : null)', $name, $name);
- }
-
- return sprintf('$this->getContext($context, "%s")', $name);
+ return sprintf('(isset($context["%s"]) ? $context["%s"] : null)', $name, $name);
}
}
diff --git a/src/Symfony/Bridge/Twig/Tests/Node/SearchAndRenderBlockNodeTest.php b/src/Symfony/Bridge/Twig/Tests/Node/SearchAndRenderBlockNodeTest.php
index 05b28c947dc71..2aea02ad4051c 100644
--- a/src/Symfony/Bridge/Twig/Tests/Node/SearchAndRenderBlockNodeTest.php
+++ b/src/Symfony/Bridge/Twig/Tests/Node/SearchAndRenderBlockNodeTest.php
@@ -263,10 +263,6 @@ public function testCompileLabelWithLabelThatEvaluatesToNullAndAttributes()
protected function getVariableGetter($name)
{
- if (PHP_VERSION_ID >= 50400) {
- return sprintf('(isset($context["%s"]) ? $context["%s"] : null)', $name, $name);
- }
-
- return sprintf('$this->getContext($context, "%s")', $name);
+ return sprintf('(isset($context["%s"]) ? $context["%s"] : null)', $name, $name);
}
}
diff --git a/src/Symfony/Bridge/Twig/Tests/Node/TransNodeTest.php b/src/Symfony/Bridge/Twig/Tests/Node/TransNodeTest.php
index 4399ca7728769..5628518f90dcb 100644
--- a/src/Symfony/Bridge/Twig/Tests/Node/TransNodeTest.php
+++ b/src/Symfony/Bridge/Twig/Tests/Node/TransNodeTest.php
@@ -38,11 +38,7 @@ public function testCompileStrict()
}
protected function getVariableGetterWithoutStrictCheck($name)
{
- if (PHP_VERSION_ID >= 50400) {
- return sprintf('(isset($context["%s"]) ? $context["%s"] : null)', $name, $name);
- }
-
- return sprintf('$this->getContext($context, "%s", true)', $name);
+ return sprintf('(isset($context["%s"]) ? $context["%s"] : null)', $name, $name);
}
protected function getVariableGetterWithStrictCheck($name)
@@ -51,10 +47,6 @@ protected function getVariableGetterWithStrictCheck($name)
return sprintf('(isset($context["%s"]) || array_key_exists("%s", $context) ? $context["%s"] : $this->notFound("%s", 0))', $name, $name, $name, $name);
}
- if (PHP_VERSION_ID >= 50400) {
- return sprintf('(isset($context["%s"]) ? $context["%s"] : $this->getContext($context, "%s"))', $name, $name, $name);
- }
-
return sprintf('$this->getContext($context, "%s")', $name);
}
}
diff --git a/src/Symfony/Bridge/Twig/composer.json b/src/Symfony/Bridge/Twig/composer.json
index 848304adcee03..73e32d4a954b1 100644
--- a/src/Symfony/Bridge/Twig/composer.json
+++ b/src/Symfony/Bridge/Twig/composer.json
@@ -16,26 +16,26 @@
}
],
"require": {
- "php": ">=5.3.9",
+ "php": ">=5.5.9",
"twig/twig": "~1.20|~2.0"
},
"require-dev": {
- "symfony/phpunit-bridge": "~2.7|~3.0.0",
- "symfony/asset": "~2.7|~3.0.0",
- "symfony/finder": "~2.3|~3.0.0",
- "symfony/form": "~2.8",
- "symfony/http-kernel": "~2.3|~3.0.0",
- "symfony/intl": "~2.3|~3.0.0",
- "symfony/routing": "~2.2|~3.0.0",
- "symfony/templating": "~2.1|~3.0.0",
- "symfony/translation": "~2.7|~3.0.0",
- "symfony/yaml": "~2.0,>=2.0.5|~3.0.0",
- "symfony/security": "~2.6|~3.0.0",
- "symfony/security-acl": "~2.6|~3.0.0",
- "symfony/stopwatch": "~2.2|~3.0.0",
- "symfony/console": "~2.7|~3.0.0",
- "symfony/var-dumper": "~2.6|~3.0.0",
- "symfony/expression-language": "~2.4|~3.0.0"
+ "symfony/phpunit-bridge": "~2.8|~3.0",
+ "symfony/asset": "~2.8|~3.0",
+ "symfony/finder": "~2.8|~3.0",
+ "symfony/form": "~2.8|~3.0",
+ "symfony/http-kernel": "~2.8|~3.0",
+ "symfony/intl": "~2.8|~3.0",
+ "symfony/routing": "~2.8|~3.0",
+ "symfony/templating": "~2.8|~3.0",
+ "symfony/translation": "~2.8|~3.0",
+ "symfony/yaml": "~2.8|~3.0",
+ "symfony/security": "~2.8|~3.0",
+ "symfony/security-acl": "~2.8|~3.0",
+ "symfony/stopwatch": "~2.8|~3.0",
+ "symfony/console": "~2.8|~3.0",
+ "symfony/var-dumper": "~2.8|~3.0",
+ "symfony/expression-language": "~2.8|~3.0"
},
"suggest": {
"symfony/finder": "",
@@ -57,7 +57,7 @@
"minimum-stability": "dev",
"extra": {
"branch-alias": {
- "dev-master": "2.8-dev"
+ "dev-master": "3.0-dev"
}
}
}
diff --git a/src/Symfony/Bundle/DebugBundle/composer.json b/src/Symfony/Bundle/DebugBundle/composer.json
index 66d77643479dd..2423faf9d4712 100644
--- a/src/Symfony/Bundle/DebugBundle/composer.json
+++ b/src/Symfony/Bundle/DebugBundle/composer.json
@@ -16,16 +16,16 @@
}
],
"require": {
- "php": ">=5.3.9",
- "symfony/http-kernel": "~2.6|~3.0.0",
- "symfony/twig-bridge": "~2.6|~3.0.0",
- "symfony/var-dumper": "~2.6|~3.0.0"
+ "php": ">=5.5.9",
+ "symfony/http-kernel": "~2.8|~3.0",
+ "symfony/twig-bridge": "~2.8|~3.0",
+ "symfony/var-dumper": "~2.8|~3.0"
},
"require-dev": {
- "symfony/phpunit-bridge": "~2.7|~3.0.0",
- "symfony/config": "~2.3|~3.0.0",
- "symfony/dependency-injection": "~2.3|~3.0.0",
- "symfony/web-profiler-bundle": "~2.3|~3.0.0"
+ "symfony/phpunit-bridge": "~2.8|~3.0",
+ "symfony/config": "~2.8|~3.0",
+ "symfony/dependency-injection": "~2.8|~3.0",
+ "symfony/web-profiler-bundle": "~2.8|~3.0"
},
"suggest": {
"symfony/config": "For service container configuration",
@@ -37,7 +37,7 @@
"minimum-stability": "dev",
"extra": {
"branch-alias": {
- "dev-master": "2.8-dev"
+ "dev-master": "3.0-dev"
}
}
}
diff --git a/src/Symfony/Bundle/FrameworkBundle/Command/ConfigDebugCommand.php b/src/Symfony/Bundle/FrameworkBundle/Command/ConfigDebugCommand.php
index 67ab40e0e9116..5a299150345db 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Command/ConfigDebugCommand.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Command/ConfigDebugCommand.php
@@ -32,9 +32,6 @@ protected function configure()
{
$this
->setName('debug:config')
- ->setAliases(array(
- 'config:debug',
- ))
->setDefinition(array(
new InputArgument('name', InputArgument::OPTIONAL, 'The bundle name or the extension alias'),
))
@@ -58,11 +55,6 @@ protected function configure()
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
- $output = new SymfonyStyle($input, $output);
- if (false !== strpos($input->getFirstArgument(), ':d')) {
- $output->caution('The use of "config:debug" command is deprecated since version 2.7 and will be removed in 3.0. Use the "debug:config" instead.');
- }
-
$name = $input->getArgument('name');
if (empty($name)) {
diff --git a/src/Symfony/Bundle/FrameworkBundle/Command/ContainerDebugCommand.php b/src/Symfony/Bundle/FrameworkBundle/Command/ContainerDebugCommand.php
index b2d1b1d8c0269..c8aea054a6884 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Command/ContainerDebugCommand.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Command/ContainerDebugCommand.php
@@ -40,9 +40,6 @@ protected function configure()
{
$this
->setName('debug:container')
- ->setAliases(array(
- 'container:debug',
- ))
->setDefinition(array(
new InputArgument('name', InputArgument::OPTIONAL, 'A service name (foo)'),
new InputOption('show-private', null, InputOption::VALUE_NONE, 'Used to show public *and* private services'),
@@ -94,10 +91,6 @@ protected function configure()
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
- if (false !== strpos($input->getFirstArgument(), ':d')) {
- $output->writeln('The use of "container:debug" command is deprecated since version 2.7 and will be removed in 3.0. Use the "debug:container" instead. ');
- }
-
$this->validateInput($input);
if ($input->getOption('parameters')) {
diff --git a/src/Symfony/Bundle/FrameworkBundle/Command/RouterApacheDumperCommand.php b/src/Symfony/Bundle/FrameworkBundle/Command/RouterApacheDumperCommand.php
deleted file mode 100644
index bfbfaa78bc48a..0000000000000
--- a/src/Symfony/Bundle/FrameworkBundle/Command/RouterApacheDumperCommand.php
+++ /dev/null
@@ -1,95 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Bundle\FrameworkBundle\Command;
-
-use Symfony\Component\Console\Input\InputArgument;
-use Symfony\Component\Console\Input\InputOption;
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Output\OutputInterface;
-use Symfony\Component\Routing\Matcher\Dumper\ApacheMatcherDumper;
-use Symfony\Component\Routing\RouterInterface;
-
-/**
- * RouterApacheDumperCommand.
- *
- * @deprecated since version 2.5, to be removed in 3.0.
- * The performance gains are minimal and it's very hard to replicate
- * the behavior of PHP implementation.
- *
- * @author Fabien Potencier
- */
-class RouterApacheDumperCommand extends ContainerAwareCommand
-{
- /**
- * {@inheritdoc}
- */
- public function isEnabled()
- {
- if (!$this->getContainer()->has('router')) {
- return false;
- }
- $router = $this->getContainer()->get('router');
- if (!$router instanceof RouterInterface) {
- return false;
- }
-
- return parent::isEnabled();
- }
-
- /**
- * {@inheritdoc}
- */
- protected function configure()
- {
- $this
- ->setName('router:dump-apache')
- ->setDefinition(array(
- new InputArgument('script_name', InputArgument::OPTIONAL, 'The script name of the application\'s front controller'),
- new InputOption('base-uri', null, InputOption::VALUE_REQUIRED, 'The base URI'),
- ))
- ->setDescription('[DEPRECATED] Dumps all routes as Apache rewrite rules')
- ->setHelp(<<%command.name% dumps all routes as Apache rewrite rules.
-These can then be used with the ApacheUrlMatcher to use Apache for route
-matching.
-
- php %command.full_name%
-
-EOF
- )
- ;
- }
-
- /**
- * {@inheritdoc}
- */
- protected function execute(InputInterface $input, OutputInterface $output)
- {
- $formatter = $this->getHelper('formatter');
-
- $output->writeln($formatter->formatSection('warning', 'The router:dump-apache command is deprecated since version 2.5 and will be removed in 3.0', 'comment'));
-
- $router = $this->getContainer()->get('router');
-
- $dumpOptions = array();
- if ($input->getArgument('script_name')) {
- $dumpOptions['script_name'] = $input->getArgument('script_name');
- }
- if ($input->getOption('base-uri')) {
- $dumpOptions['base_uri'] = $input->getOption('base-uri');
- }
-
- $dumper = new ApacheMatcherDumper($router->getRouteCollection());
-
- $output->writeln($dumper->dump($dumpOptions), OutputInterface::OUTPUT_RAW);
- }
-}
diff --git a/src/Symfony/Bundle/FrameworkBundle/Command/RouterDebugCommand.php b/src/Symfony/Bundle/FrameworkBundle/Command/RouterDebugCommand.php
index 6f7db66a660fc..4f8c8bf615aa9 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Command/RouterDebugCommand.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Command/RouterDebugCommand.php
@@ -50,9 +50,6 @@ protected function configure()
{
$this
->setName('debug:router')
- ->setAliases(array(
- 'router:debug',
- ))
->setDefinition(array(
new InputArgument('name', InputArgument::OPTIONAL, 'A route name'),
new InputOption('show-controllers', null, InputOption::VALUE_NONE, 'Show assigned controllers in overview'),
@@ -77,10 +74,6 @@ protected function configure()
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
- if (false !== strpos($input->getFirstArgument(), ':d')) {
- $output->writeln('The use of "router:debug" command is deprecated since version 2.7 and will be removed in 3.0. Use the "debug:router" instead. ');
- }
-
$name = $input->getArgument('name');
$helper = new DescriptorHelper();
diff --git a/src/Symfony/Bundle/FrameworkBundle/Command/ServerCommand.php b/src/Symfony/Bundle/FrameworkBundle/Command/ServerCommand.php
index 32f749f79f666..0920b4f4a29eb 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Command/ServerCommand.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Command/ServerCommand.php
@@ -23,7 +23,7 @@ abstract class ServerCommand extends ContainerAwareCommand
*/
public function isEnabled()
{
- if (version_compare(phpversion(), '5.4.0', '<') || defined('HHVM_VERSION')) {
+ if (defined('HHVM_VERSION')) {
return false;
}
diff --git a/src/Symfony/Bundle/FrameworkBundle/Command/ServerRunCommand.php b/src/Symfony/Bundle/FrameworkBundle/Command/ServerRunCommand.php
index 44ebdeb36e7d4..ce4396c1fb6eb 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Command/ServerRunCommand.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Command/ServerRunCommand.php
@@ -30,7 +30,7 @@ class ServerRunCommand extends ServerCommand
*/
public function isEnabled()
{
- if (PHP_VERSION_ID < 50400 || defined('HHVM_VERSION')) {
+ if (defined('HHVM_VERSION')) {
return false;
}
diff --git a/src/Symfony/Bundle/FrameworkBundle/Command/TranslationDebugCommand.php b/src/Symfony/Bundle/FrameworkBundle/Command/TranslationDebugCommand.php
index c6be5ba47554f..d7e51cef28d09 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Command/TranslationDebugCommand.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Command/TranslationDebugCommand.php
@@ -42,9 +42,6 @@ protected function configure()
{
$this
->setName('debug:translation')
- ->setAliases(array(
- 'translation:debug',
- ))
->setDefinition(array(
new InputArgument('locale', InputArgument::REQUIRED, 'The locale'),
new InputArgument('bundle', InputArgument::OPTIONAL, 'The bundle name or directory where to load the messages, defaults to app/Resources folder'),
@@ -94,9 +91,6 @@ protected function configure()
protected function execute(InputInterface $input, OutputInterface $output)
{
$output = new SymfonyStyle($input, $output);
- if (false !== strpos($input->getFirstArgument(), ':d')) {
- $output->caution('The use of "translation:debug" command is deprecated since version 2.7 and will be removed in 3.0. Use the "debug:translation" instead.');
- }
$locale = $input->getArgument('locale');
$domain = $input->getOption('domain');
diff --git a/src/Symfony/Bundle/FrameworkBundle/Command/YamlLintCommand.php b/src/Symfony/Bundle/FrameworkBundle/Command/YamlLintCommand.php
index 3f931f54c1e27..80f4e4ebb8ff2 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Command/YamlLintCommand.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Command/YamlLintCommand.php
@@ -30,7 +30,6 @@ protected function configure()
{
$this
->setName('lint:yaml')
- ->setAliases(array('yaml:lint'))
->setDescription('Lints a file and outputs encountered errors')
->addArgument('filename', null, 'A file or a directory or STDIN')
->addOption('format', null, InputOption::VALUE_REQUIRED, 'The output format', 'txt')
@@ -62,10 +61,6 @@ protected function configure()
protected function execute(InputInterface $input, OutputInterface $output)
{
- if (false !== strpos($input->getFirstArgument(), ':l')) {
- $output->writeln('The use of "yaml:lint" command is deprecated since version 2.7 and will be removed in 3.0. Use the "lint:yaml" instead. ');
- }
-
$filename = $input->getArgument('filename');
if (!$filename) {
@@ -157,7 +152,7 @@ private function displayJson(OutputInterface $output, $filesInfo)
}
});
- $output->writeln(json_encode($filesInfo, defined('JSON_PRETTY_PRINT') ? JSON_PRETTY_PRINT : 0));
+ $output->writeln(json_encode($filesInfo, JSON_PRETTY_PRINT));
return min($errors, 1);
}
diff --git a/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/Descriptor.php b/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/Descriptor.php
index d6e0c14da4893..f93dd7dce56eb 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/Descriptor.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/Descriptor.php
@@ -32,7 +32,7 @@ abstract class Descriptor implements DescriptorInterface
/**
* @var OutputInterface
*/
- private $output;
+ protected $output;
/**
* {@inheritdoc}
@@ -101,23 +101,6 @@ protected function write($content, $decorated = false)
$this->output->write($content, false, $decorated ? OutputInterface::OUTPUT_NORMAL : OutputInterface::OUTPUT_RAW);
}
- /**
- * Writes content to output.
- *
- * @param Table $table
- * @param bool $decorated
- */
- protected function renderTable(Table $table, $decorated = false)
- {
- if (!$decorated) {
- $table->getStyle()->setCellRowFormat('%s');
- $table->getStyle()->setCellRowContentFormat('%s');
- $table->getStyle()->setCellHeaderFormat('%s');
- }
-
- $table->render();
- }
-
/**
* Describes an InputArgument instance.
*
diff --git a/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/JsonDescriptor.php b/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/JsonDescriptor.php
index 57780d2e52fd3..307a8e082aeb3 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/JsonDescriptor.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/JsonDescriptor.php
@@ -171,12 +171,7 @@ protected function describeContainerParameter($parameter, array $options = array
private function writeData(array $data, array $options)
{
$flags = isset($options['json_encoding']) ? $options['json_encoding'] : 0;
-
- if (defined('JSON_PRETTY_PRINT')) {
- $flags |= JSON_PRETTY_PRINT;
- }
-
- $this->write(json_encode($data, $flags)."\n");
+ $this->write(json_encode($data, $flags | JSON_PRETTY_PRINT)."\n");
}
/**
@@ -186,9 +181,6 @@ private function writeData(array $data, array $options)
*/
protected function getRouteData(Route $route)
{
- $requirements = $route->getRequirements();
- unset($requirements['_scheme'], $requirements['_method']);
-
return array(
'path' => $route->getPath(),
'pathRegex' => $route->compile()->getRegex(),
@@ -198,7 +190,7 @@ protected function getRouteData(Route $route)
'method' => $route->getMethods() ? implode('|', $route->getMethods()) : 'ANY',
'class' => get_class($route),
'defaults' => $route->getDefaults(),
- 'requirements' => $requirements ?: 'NO CUSTOM',
+ 'requirements' => $route->getRequirements() ?: 'NO CUSTOM',
'options' => $route->getOptions(),
);
}
@@ -223,25 +215,9 @@ private function getContainerDefinitionData(Definition $definition, $omitTags =
$data['shared'] = $definition->isShared();
}
- if (method_exists($definition, 'isSynchronized')) {
- $data['synchronized'] = $definition->isSynchronized(false);
- }
-
$data['abstract'] = $definition->isAbstract();
$data['file'] = $definition->getFile();
- if ($definition->getFactoryClass(false)) {
- $data['factory_class'] = $definition->getFactoryClass(false);
- }
-
- if ($definition->getFactoryService(false)) {
- $data['factory_service'] = $definition->getFactoryService(false);
- }
-
- if ($definition->getFactoryMethod(false)) {
- $data['factory_method'] = $definition->getFactoryMethod(false);
- }
-
if ($factory = $definition->getFactory()) {
if (is_array($factory)) {
if ($factory[0] instanceof Reference) {
diff --git a/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/MarkdownDescriptor.php b/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/MarkdownDescriptor.php
index 8f5437146bb57..4f50cf63880cd 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/MarkdownDescriptor.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/MarkdownDescriptor.php
@@ -49,9 +49,6 @@ protected function describeRouteCollection(RouteCollection $routes, array $optio
*/
protected function describeRoute(Route $route, array $options = array())
{
- $requirements = $route->getRequirements();
- unset($requirements['_scheme'], $requirements['_method']);
-
$output = '- Path: '.$route->getPath()
."\n".'- Path Regex: '.$route->compile()->getRegex()
."\n".'- Host: '.('' !== $route->getHost() ? $route->getHost() : 'ANY')
@@ -60,7 +57,7 @@ protected function describeRoute(Route $route, array $options = array())
."\n".'- Method: '.($route->getMethods() ? implode('|', $route->getMethods()) : 'ANY')
."\n".'- Class: '.get_class($route)
."\n".'- Defaults: '.$this->formatRouterConfig($route->getDefaults())
- ."\n".'- Requirements: '.($requirements ? $this->formatRouterConfig($requirements) : 'NO CUSTOM')
+ ."\n".'- Requirements: '.($route->getRequirements() ? $this->formatRouterConfig($route->getRequirements()) : 'NO CUSTOM')
."\n".'- Options: '.$this->formatRouterConfig($route->getOptions());
$this->write(isset($options['name'])
@@ -189,28 +186,12 @@ protected function describeContainerDefinition(Definition $definition, array $op
$output .= "\n".'- Shared: '.($definition->isShared() ? 'yes' : 'no');
}
- if (method_exists($definition, 'isSynchronized')) {
- $output .= "\n".'- Synchronized: '.($definition->isSynchronized(false) ? 'yes' : 'no');
- }
-
$output .= "\n".'- Abstract: '.($definition->isAbstract() ? 'yes' : 'no');
if ($definition->getFile()) {
$output .= "\n".'- File: `'.$definition->getFile().'`';
}
- if ($definition->getFactoryClass(false)) {
- $output .= "\n".'- Factory Class: `'.$definition->getFactoryClass(false).'`';
- }
-
- if ($definition->getFactoryService(false)) {
- $output .= "\n".'- Factory Service: `'.$definition->getFactoryService(false).'`';
- }
-
- if ($definition->getFactoryMethod(false)) {
- $output .= "\n".'- Factory Method: `'.$definition->getFactoryMethod(false).'`';
- }
-
if ($factory = $definition->getFactory()) {
if (is_array($factory)) {
if ($factory[0] instanceof Reference) {
diff --git a/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/TextDescriptor.php b/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/TextDescriptor.php
index 422e50ead2b83..59efa47b0d4bf 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/TextDescriptor.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/TextDescriptor.php
@@ -35,8 +35,8 @@ protected function describeRouteCollection(RouteCollection $routes, array $optio
{
$showControllers = isset($options['show_controllers']) && $options['show_controllers'];
$headers = array('Name', 'Method', 'Scheme', 'Host', 'Path');
- $table = new Table($this->getOutput());
- $table->setStyle('compact');
+
+ $table = new Table($this->output);
$table->setHeaders($showControllers ? array_merge($headers, array('Controller')) : $headers);
foreach ($routes->all() as $name => $route) {
@@ -70,9 +70,6 @@ protected function describeRouteCollection(RouteCollection $routes, array $optio
*/
protected function describeRoute(Route $route, array $options = array())
{
- $requirements = $route->getRequirements();
- unset($requirements['_scheme'], $requirements['_method']);
-
// fixme: values were originally written as raw
$description = array(
'Path '.$route->getPath(),
@@ -83,7 +80,7 @@ protected function describeRoute(Route $route, array $options = array())
'Method '.($route->getMethods() ? implode('|', $route->getMethods()) : 'ANY'),
'Class '.get_class($route),
'Defaults '.$this->formatRouterConfig($route->getDefaults()),
- 'Requirements '.($requirements ? $this->formatRouterConfig($requirements) : 'NO CUSTOM'),
+ 'Requirements '.($route->getRequirements() ? $this->formatRouterConfig($route->getRequirements()) : 'NO CUSTOM'),
'Options '.$this->formatRouterConfig($route->getOptions()),
);
@@ -100,8 +97,7 @@ protected function describeRoute(Route $route, array $options = array())
*/
protected function describeContainerParameters(ParameterBag $parameters, array $options = array())
{
- $table = new Table($this->getOutput());
- $table->setStyle('compact');
+ $table = new Table($this->output);
$table->setHeaders(array('Parameter', 'Value'));
foreach ($this->sortParameters($parameters) as $parameter => $value) {
@@ -201,8 +197,7 @@ protected function describeContainerServices(ContainerBuilder $builder, array $o
$tagsCount = count($maxTags);
$tagsNames = array_keys($maxTags);
- $table = new Table($this->getOutput());
- $table->setStyle('compact');
+ $table = new Table($this->output);
$table->setHeaders(array_merge(array('Service ID'), $tagsNames, array('Class name')));
foreach ($this->sortServiceIds($serviceIds) as $serviceId) {
@@ -268,27 +263,12 @@ protected function describeContainerDefinition(Definition $definition, array $op
if (method_exists($definition, 'isShared')) {
$description[] = sprintf('Shared %s', $definition->isShared() ? 'yes' : 'no');
}
- if (method_exists($definition, 'isSynchronized')) {
- $description[] = sprintf('Synchronized %s', $definition->isSynchronized(false) ? 'yes' : 'no');
- }
$description[] = sprintf('Abstract %s', $definition->isAbstract() ? 'yes' : 'no');
if ($definition->getFile()) {
$description[] = sprintf('Required File %s', $definition->getFile() ?: '-');
}
- if ($definition->getFactoryClass(false)) {
- $description[] = sprintf('Factory Class %s', $definition->getFactoryClass(false));
- }
-
- if ($definition->getFactoryService(false)) {
- $description[] = sprintf('Factory Service %s', $definition->getFactoryService(false));
- }
-
- if ($definition->getFactoryMethod(false)) {
- $description[] = sprintf('Factory Method %s', $definition->getFactoryMethod(false));
- }
-
if ($factory = $definition->getFactory()) {
if (is_array($factory)) {
if ($factory[0] instanceof Reference) {
diff --git a/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/XmlDescriptor.php b/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/XmlDescriptor.php
index c9e6f7eb731a3..6d30245321fa4 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/XmlDescriptor.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/XmlDescriptor.php
@@ -196,11 +196,9 @@ private function getRouteDocument(Route $route, $name = null)
}
}
- $requirements = $route->getRequirements();
- unset($requirements['_scheme'], $requirements['_method']);
- if (count($requirements)) {
+ if (count($route->getRequirements())) {
$routeXML->appendChild($requirementsXML = $dom->createElement('requirements'));
- foreach ($requirements as $attribute => $pattern) {
+ foreach ($route->getRequirements() as $attribute => $pattern) {
$requirementsXML->appendChild($requirementXML = $dom->createElement('requirement'));
$requirementXML->setAttribute('key', $attribute);
$requirementXML->appendChild(new \DOMText($pattern));
@@ -331,20 +329,6 @@ private function getContainerDefinitionDocument(Definition $definition, $id = nu
$serviceXML->setAttribute('class', $definition->getClass());
- if (method_exists($definition, 'getFactoryMethod')) {
- if ($definition->getFactoryClass(false)) {
- $serviceXML->setAttribute('factory-class', $definition->getFactoryClass(false));
- }
-
- if ($definition->getFactoryService(false)) {
- $serviceXML->setAttribute('factory-service', $definition->getFactoryService(false));
- }
-
- if ($definition->getFactoryMethod(false)) {
- $serviceXML->setAttribute('factory-method', $definition->getFactoryMethod(false));
- }
- }
-
if ($factory = $definition->getFactory()) {
$serviceXML->appendChild($factoryXML = $dom->createElement('factory'));
@@ -369,9 +353,6 @@ private function getContainerDefinitionDocument(Definition $definition, $id = nu
if (method_exists($definition, 'isShared')) {
$serviceXML->setAttribute('shared', $definition->isShared() ? 'true' : 'false');
}
- if (method_exists($definition, 'isSynchronized')) {
- $serviceXML->setAttribute('synchronized', $definition->isSynchronized(false) ? 'true' : 'false');
- }
$serviceXML->setAttribute('abstract', $definition->isAbstract() ? 'true' : 'false');
$serviceXML->setAttribute('file', $definition->getFile());
diff --git a/src/Symfony/Bundle/FrameworkBundle/Controller/Controller.php b/src/Symfony/Bundle/FrameworkBundle/Controller/Controller.php
index ecdb73598c1ba..e67538642c58c 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Controller/Controller.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Controller/Controller.php
@@ -34,7 +34,7 @@
*
* @author Fabien Potencier
*/
-class Controller extends ContainerAware
+abstract class Controller extends ContainerAware
{
/**
* Generates a URL from the given parameters.
@@ -47,7 +47,7 @@ class Controller extends ContainerAware
*
* @see UrlGeneratorInterface
*/
- public function generateUrl($route, $parameters = array(), $referenceType = UrlGeneratorInterface::ABSOLUTE_PATH)
+ protected function generateUrl($route, $parameters = array(), $referenceType = UrlGeneratorInterface::ABSOLUTE_PATH)
{
return $this->container->get('router')->generate($route, $parameters, $referenceType);
}
@@ -61,7 +61,7 @@ public function generateUrl($route, $parameters = array(), $referenceType = UrlG
*
* @return Response A Response instance
*/
- public function forward($controller, array $path = array(), array $query = array())
+ protected function forward($controller, array $path = array(), array $query = array())
{
$path['_controller'] = $controller;
$subRequest = $this->container->get('request_stack')->getCurrentRequest()->duplicate($query, null, $path);
@@ -77,7 +77,7 @@ public function forward($controller, array $path = array(), array $query = array
*
* @return RedirectResponse
*/
- public function redirect($url, $status = 302)
+ protected function redirect($url, $status = 302)
{
return new RedirectResponse($url, $status);
}
@@ -157,7 +157,7 @@ protected function denyAccessUnlessGranted($attributes, $object = null, $message
*
* @return string The rendered view
*/
- public function renderView($view, array $parameters = array())
+ protected function renderView($view, array $parameters = array())
{
return $this->container->get('templating')->render($view, $parameters);
}
@@ -171,7 +171,7 @@ public function renderView($view, array $parameters = array())
*
* @return Response A Response instance
*/
- public function render($view, array $parameters = array(), Response $response = null)
+ protected function render($view, array $parameters = array(), Response $response = null)
{
return $this->container->get('templating')->renderResponse($view, $parameters, $response);
}
@@ -185,7 +185,7 @@ public function render($view, array $parameters = array(), Response $response =
*
* @return StreamedResponse A StreamedResponse instance
*/
- public function stream($view, array $parameters = array(), StreamedResponse $response = null)
+ protected function stream($view, array $parameters = array(), StreamedResponse $response = null)
{
$templating = $this->container->get('templating');
@@ -214,7 +214,7 @@ public function stream($view, array $parameters = array(), StreamedResponse $res
*
* @return NotFoundHttpException
*/
- public function createNotFoundException($message = 'Not Found', \Exception $previous = null)
+ protected function createNotFoundException($message = 'Not Found', \Exception $previous = null)
{
return new NotFoundHttpException($message, $previous);
}
@@ -231,7 +231,7 @@ public function createNotFoundException($message = 'Not Found', \Exception $prev
*
* @return AccessDeniedException
*/
- public function createAccessDeniedException($message = 'Access Denied.', \Exception $previous = null)
+ protected function createAccessDeniedException($message = 'Access Denied.', \Exception $previous = null)
{
return new AccessDeniedException($message, $previous);
}
@@ -245,7 +245,7 @@ public function createAccessDeniedException($message = 'Access Denied.', \Except
*
* @return Form
*/
- public function createForm($type, $data = null, array $options = array())
+ protected function createForm($type, $data = null, array $options = array())
{
return $this->container->get('form.factory')->create($type, $data, $options);
}
@@ -258,27 +258,11 @@ public function createForm($type, $data = null, array $options = array())
*
* @return FormBuilder
*/
- public function createFormBuilder($data = null, array $options = array())
+ protected function createFormBuilder($data = null, array $options = array())
{
return $this->container->get('form.factory')->createBuilder('form', $data, $options);
}
- /**
- * Shortcut to return the request service.
- *
- * @return Request
- *
- * @deprecated since version 2.4, to be removed in 3.0.
- * Ask Symfony to inject the Request object into your controller
- * method instead by type hinting it in the method's signature.
- */
- public function getRequest()
- {
- @trigger_error('The '.__METHOD__.' method is deprecated since version 2.4 and will be removed in 3.0. The only reliable way to get the "Request" object is to inject it in the action method.', E_USER_DEPRECATED);
-
- return $this->container->get('request_stack')->getCurrentRequest();
- }
-
/**
* Shortcut to return the Doctrine Registry service.
*
@@ -286,7 +270,7 @@ public function getRequest()
*
* @throws \LogicException If DoctrineBundle is not available
*/
- public function getDoctrine()
+ protected function getDoctrine()
{
if (!$this->container->has('doctrine')) {
throw new \LogicException('The DoctrineBundle is not registered in your application.');
@@ -304,7 +288,7 @@ public function getDoctrine()
*
* @see TokenInterface::getUser()
*/
- public function getUser()
+ protected function getUser()
{
if (!$this->container->has('security.token_storage')) {
throw new \LogicException('The SecurityBundle is not registered in your application.');
@@ -329,7 +313,7 @@ public function getUser()
*
* @return bool true if the service id is defined, false otherwise
*/
- public function has($id)
+ protected function has($id)
{
return $this->container->has($id);
}
@@ -341,7 +325,7 @@ public function has($id)
*
* @return object The service
*/
- public function get($id)
+ protected function get($id)
{
if ('request' === $id) {
@trigger_error('The "request" service is deprecated and will be removed in 3.0. Add a typehint for Symfony\\Component\\HttpFoundation\\Request to your controller parameters to retrieve the request instead.', E_USER_DEPRECATED);
diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/TemplatingAssetHelperPass.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/TemplatingAssetHelperPass.php
deleted file mode 100644
index 4a97e0f746eb7..0000000000000
--- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/TemplatingAssetHelperPass.php
+++ /dev/null
@@ -1,71 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler;
-
-use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
-use Symfony\Component\DependencyInjection\ContainerBuilder;
-use Symfony\Component\DependencyInjection\Definition;
-use Symfony\Component\DependencyInjection\Reference;
-
-@trigger_error('The '.__NAMESPACE__.'\TemplatingAssetHelperPass class is deprecated since version 2.7 and will be removed in 3.0.', E_USER_DEPRECATED);
-
-/**
- * @deprecated since 2.7, will be removed in 3.0
- */
-class TemplatingAssetHelperPass implements CompilerPassInterface
-{
- public function process(ContainerBuilder $container)
- {
- if (!$container->hasDefinition('templating.helper.assets')) {
- return;
- }
-
- $assetsHelperDefinition = $container->getDefinition('templating.helper.assets');
- $args = $assetsHelperDefinition->getArguments();
-
- if ('request' === $this->getPackageScope($container, $args[0])) {
- $assetsHelperDefinition->setScope('request');
-
- return;
- }
-
- if (!array_key_exists(1, $args)) {
- return;
- }
-
- if (!is_array($args[1])) {
- return;
- }
-
- foreach ($args[1] as $arg) {
- if ('request' === $this->getPackageScope($container, $arg)) {
- $assetsHelperDefinition->setScope('request');
-
- break;
- }
- }
- }
-
- private function getPackageScope(ContainerBuilder $container, $package)
- {
- if ($package instanceof Reference) {
- return $container->findDefinition((string) $package)->getScope();
- }
-
- if ($package instanceof Definition) {
- return $package->getScope();
- }
-
- // Someone did some voodoo with a compiler pass. So we ignore this
- // 'package'. Can we be sure, it's a package anyway?
- }
-}
diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php
index 023276e476b9e..db3378da6a002 100644
--- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php
+++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php
@@ -53,73 +53,6 @@ public function getConfigTreeBuilder()
return $v;
})
->end()
- ->validate()
- ->ifTrue(function ($v) { return !isset($v['assets']); })
- ->then(function ($v) {
- if (!isset($v['templating'])
- || !$v['templating']['assets_version']
- && !count($v['templating']['assets_base_urls']['http'])
- && !count($v['templating']['assets_base_urls']['ssl'])
- && !count($v['templating']['packages'])
- ) {
- $v['assets'] = array(
- 'version' => null,
- 'version_format' => '%%s?%%s',
- 'base_path' => '',
- 'base_urls' => array(),
- 'packages' => array(),
- );
- }
-
- return $v;
- })
- ->end()
- ->validate()
- ->ifTrue(function ($v) { return isset($v['templating']); })
- ->then(function ($v) {
- if ($v['templating']['assets_version']
- || count($v['templating']['assets_base_urls']['http'])
- || count($v['templating']['assets_base_urls']['ssl'])
- || count($v['templating']['packages'])
- ) {
- @trigger_error('The assets settings under framework.templating are deprecated since version 2.7 and will be removed in 3.0. Use the framework.assets configuration key instead', E_USER_DEPRECATED);
-
- // convert the old configuration to the new one
- if (isset($v['assets'])) {
- throw new \LogicException('You cannot use assets settings under "framework.templating" and "assets" configurations in the same project.');
- }
-
- $v['assets'] = array(
- 'version' => $v['templating']['assets_version'],
- 'version_format' => $v['templating']['assets_version_format'],
- 'base_path' => '',
- 'base_urls' => array_values(array_unique(array_merge($v['templating']['assets_base_urls']['http'], $v['templating']['assets_base_urls']['ssl']))),
- 'packages' => array(),
- );
-
- foreach ($v['templating']['packages'] as $name => $config) {
- $v['assets']['packages'][$name] = array(
- 'version' => (string) $config['version'],
- 'version_format' => $config['version_format'],
- 'base_path' => '',
- 'base_urls' => array_values(array_unique(array_merge($config['base_urls']['http'], $config['base_urls']['ssl']))),
- );
- }
- }
-
- unset($v['templating']['assets_version'], $v['templating']['assets_version_format'], $v['templating']['assets_base_urls'], $v['templating']['packages']);
-
- return $v;
- })
- ->end()
- ->beforeNormalization()
- ->ifTrue(function ($v) { return isset($v['validation']['api']); })
- ->then(function ($v) {
- @trigger_error('The validation.api configuration key is deprecated since version 2.7 and will be removed in 3.0', E_USER_DEPRECATED);
-
- return $v;
- })
- ->end()
->children()
->scalarNode('secret')->end()
->scalarNode('http_method_override')
@@ -387,35 +320,14 @@ private function addRequestSection(ArrayNodeDefinition $rootNode)
private function addTemplatingSection(ArrayNodeDefinition $rootNode)
{
- $organizeUrls = function ($urls) {
- $urls += array(
- 'http' => array(),
- 'ssl' => array(),
- );
-
- foreach ($urls as $i => $url) {
- if (is_int($i)) {
- if (0 === strpos($url, 'https://') || 0 === strpos($url, '//')) {
- $urls['http'][] = $urls['ssl'][] = $url;
- } else {
- $urls['http'][] = $url;
- }
- unset($urls[$i]);
- }
- }
-
- return $urls;
- };
-
$rootNode
->children()
->arrayNode('templating')
->info('templating configuration')
->canBeUnset()
->children()
- ->scalarNode('assets_version')->defaultNull()->info('Deprecated since 2.7, will be removed in 3.0. Use the new assets entry instead.')->end()
- ->scalarNode('assets_version_format')->defaultValue('%%s?%%s')->info('Deprecated since 2.7, will be removed in 3.0. Use the new assets entry instead.')->end()
->scalarNode('hinclude_default_template')->defaultNull()->end()
+ ->scalarNode('cache')->end()
->arrayNode('form')
->addDefaultsIfNotSet()
->fixXmlConfig('resource')
@@ -433,31 +345,6 @@ private function addTemplatingSection(ArrayNodeDefinition $rootNode)
->end()
->end()
->end()
- ->fixXmlConfig('assets_base_url')
- ->children()
- ->arrayNode('assets_base_urls')
- ->info('Deprecated since 2.7, will be removed in 3.0. Use the new assets entry instead.')
- ->performNoDeepMerging()
- ->addDefaultsIfNotSet()
- ->beforeNormalization()
- ->ifTrue(function ($v) { return !is_array($v); })
- ->then(function ($v) { return array($v); })
- ->end()
- ->beforeNormalization()
- ->always()
- ->then($organizeUrls)
- ->end()
- ->children()
- ->arrayNode('http')
- ->prototype('scalar')->end()
- ->end()
- ->arrayNode('ssl')
- ->prototype('scalar')->end()
- ->end()
- ->end()
- ->end()
- ->scalarNode('cache')->end()
- ->end()
->fixXmlConfig('engine')
->children()
->arrayNode('engines')
@@ -481,40 +368,6 @@ private function addTemplatingSection(ArrayNodeDefinition $rootNode)
->prototype('scalar')->end()
->end()
->end()
- ->fixXmlConfig('package')
- ->children()
- ->arrayNode('packages')
- ->info('Deprecated since 2.7, will be removed in 3.0. Use the new assets entry instead.')
- ->useAttributeAsKey('name')
- ->prototype('array')
- ->fixXmlConfig('base_url')
- ->children()
- ->scalarNode('version')->defaultNull()->end()
- ->scalarNode('version_format')->defaultValue('%%s?%%s')->end()
- ->arrayNode('base_urls')
- ->performNoDeepMerging()
- ->addDefaultsIfNotSet()
- ->beforeNormalization()
- ->ifTrue(function ($v) { return !is_array($v); })
- ->then(function ($v) { return array($v); })
- ->end()
- ->beforeNormalization()
- ->always()
- ->then($organizeUrls)
- ->end()
- ->children()
- ->arrayNode('http')
- ->prototype('scalar')->end()
- ->end()
- ->arrayNode('ssl')
- ->prototype('scalar')->end()
- ->end()
- ->end()
- ->end()
- ->end()
- ->end()
- ->end()
- ->end()
->end()
->end()
;
diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
index 04953b11be639..72c6b3b61a46d 100644
--- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
+++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
@@ -142,7 +142,7 @@ public function load(array $configs, ContainerBuilder $container)
$loader->load('debug.xml');
$definition = $container->findDefinition('http_kernel');
- $definition->replaceArgument(2, new Reference('debug.controller_resolver'));
+ $definition->replaceArgument(1, new Reference('debug.controller_resolver'));
// replace the regular event_dispatcher service with the debug one
$definition = $container->findDefinition('event_dispatcher');
@@ -560,12 +560,12 @@ private function registerTemplatingConfiguration(array $config, $ide, ContainerB
'Symfony\\Bundle\\FrameworkBundle\\Templating\\PhpEngine',
'Symfony\\Bundle\\FrameworkBundle\\Templating\\Loader\\FilesystemLoader',
));
- }
- if ($container->hasDefinition('assets.packages')) {
- $container->getDefinition('templating.helper.assets')->replaceArgument(0, new Reference('assets.packages'));
- } else {
- $container->removeDefinition('templating.helper.assets');
+ if ($container->hasDefinition('assets.packages')) {
+ $container->getDefinition('templating.helper.assets')->replaceArgument(0, new Reference('assets.packages'));
+ } else {
+ $container->removeDefinition('templating.helper.assets');
+ }
}
}
diff --git a/src/Symfony/Bundle/FrameworkBundle/HttpCache/HttpCache.php b/src/Symfony/Bundle/FrameworkBundle/HttpCache/HttpCache.php
index 05dbfb3bd0cfb..fad4adc04434d 100644
--- a/src/Symfony/Bundle/FrameworkBundle/HttpCache/HttpCache.php
+++ b/src/Symfony/Bundle/FrameworkBundle/HttpCache/HttpCache.php
@@ -75,20 +75,6 @@ protected function createSurrogate()
return new Esi();
}
- /**
- * Creates new ESI instance.
- *
- * @return Esi
- *
- * @deprecated since version 2.6, to be removed in 3.0. Use createSurrogate() instead
- */
- protected function createEsi()
- {
- @trigger_error('The '.__METHOD__.' method is deprecated since version 2.6 and will be removed in 3.0. Use createSurrogate() instead.', E_USER_DEPRECATED);
-
- return $this->createSurrogate();
- }
-
protected function createStore()
{
return new Store($this->cacheDir ?: $this->kernel->getCacheDir().'/http_cache');
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/annotations.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/annotations.xml
index 1c0c312dc2673..9d8645e00f46d 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/annotations.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/annotations.xml
@@ -4,22 +4,16 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
-
- Doctrine\Common\Annotations\AnnotationReader
- Doctrine\Common\Annotations\CachedReader
- Doctrine\Common\Annotations\FileCacheReader
-
-
-
+
-
+
-
+
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/collectors.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/collectors.xml
index 01a271797ae94..12bea76fb7e60 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/collectors.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/collectors.xml
@@ -4,24 +4,13 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
-
- Symfony\Component\HttpKernel\DataCollector\ConfigDataCollector
- Symfony\Component\HttpKernel\DataCollector\RequestDataCollector
- Symfony\Component\HttpKernel\DataCollector\ExceptionDataCollector
- Symfony\Component\HttpKernel\DataCollector\EventDataCollector
- Symfony\Component\HttpKernel\DataCollector\LoggerDataCollector
- Symfony\Component\HttpKernel\DataCollector\TimeDataCollector
- Symfony\Component\HttpKernel\DataCollector\MemoryDataCollector
- Symfony\Bundle\FrameworkBundle\DataCollector\RouterDataCollector
-
-
-
+
-
+
@@ -30,32 +19,32 @@
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/debug.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/debug.xml
index 819f9623b004f..d5d7855a23904 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/debug.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/debug.xml
@@ -5,21 +5,19 @@
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
- Symfony\Component\HttpKernel\Debug\TraceableEventDispatcher
%kernel.cache_dir%/%kernel.container_class%.xml
- Symfony\Component\HttpKernel\Controller\TraceableControllerResolver
-1
-
+
-
+
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/debug_prod.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/debug_prod.xml
index 9d70124fbe16a..4078a656d5a9c 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/debug_prod.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/debug_prod.xml
@@ -5,13 +5,11 @@
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
- Symfony\Component\HttpKernel\EventListener\DebugHandlersListener
- Symfony\Component\Stopwatch\Stopwatch
0
-
+
@@ -22,6 +20,6 @@
null
-
+
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/esi.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/esi.xml
index 277054442ff18..86600a8698566 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/esi.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/esi.xml
@@ -4,15 +4,10 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
-
- Symfony\Component\HttpKernel\HttpCache\Esi
- Symfony\Component\HttpKernel\EventListener\SurrogateListener
-
-
-
+
-
+
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/form.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/form.xml
index 5f12f57c1eb79..ffc8a4a440d13 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/form.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/form.xml
@@ -4,21 +4,12 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
-
- Symfony\Component\Form\ResolvedFormTypeFactory
- Symfony\Component\Form\FormRegistry
- Symfony\Component\Form\FormFactory
- Symfony\Component\Form\Extension\DependencyInjection\DependencyInjectionExtension
- Symfony\Component\Form\Extension\Validator\ValidatorTypeGuesser
- Symfony\Component\Form\Extension\HttpFoundation\HttpFoundationRequestHandler
-
-
-
+
-
+
-
+
-
+
@@ -51,7 +42,7 @@
-
+
@@ -161,7 +152,7 @@
-
+
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/form_debug.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/form_debug.xml
index 1e8e3c89834d5..757724148c794 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/form_debug.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/form_debug.xml
@@ -4,31 +4,24 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
-
- Symfony\Component\Form\Extension\DataCollector\Proxy\ResolvedTypeFactoryDataCollectorProxy
- Symfony\Component\Form\Extension\DataCollector\Type\DataCollectorTypeExtension
- Symfony\Component\Form\Extension\DataCollector\FormDataCollector
- Symfony\Component\Form\Extension\DataCollector\FormDataExtractor
-
-
-
+
-
+
-
+
-
+
-
+
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/fragment_listener.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/fragment_listener.xml
index 930ca17b0add3..332e767c4dafe 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/fragment_listener.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/fragment_listener.xml
@@ -4,12 +4,8 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
-
- Symfony\Component\HttpKernel\EventListener\FragmentListener
-
-
-
+
%fragment.path%
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/fragment_renderer.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/fragment_renderer.xml
index d3687da13a5d3..bbf857a50b2c5 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/fragment_renderer.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/fragment_renderer.xml
@@ -5,36 +5,32 @@
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
- Symfony\Component\HttpKernel\DependencyInjection\LazyLoadingFragmentHandler
- Symfony\Component\HttpKernel\Fragment\InlineFragmentRenderer
- Symfony\Component\HttpKernel\Fragment\HIncludeFragmentRenderer
- Symfony\Component\HttpKernel\Fragment\EsiFragmentRenderer
/_fragment
-
+
%kernel.debug%
-
+
%fragment.path%
-
+
%fragment.renderer.hinclude.global_template%
%fragment.path%
-
+
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/profiling.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/profiling.xml
index cee86b3b72cfa..35e266125ced1 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/profiling.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/profiling.xml
@@ -4,13 +4,8 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
-
- Symfony\Component\HttpKernel\Profiler\Profiler
- Symfony\Component\HttpKernel\EventListener\ProfilerListener
-
-
-
+
@@ -23,7 +18,7 @@
%profiler.storage.lifetime%
-
+
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/property_access.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/property_access.xml
index 0e0fc65dea10d..1ebee06451de7 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/property_access.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/property_access.xml
@@ -4,12 +4,8 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
-
- Symfony\Component\PropertyAccess\PropertyAccessor
-
-
-
+
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/request.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/request.xml
index cc836c35e3b0f..323744edaa42e 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/request.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/request.xml
@@ -4,12 +4,8 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
-
- Symfony\Component\HttpKernel\EventListener\AddRequestFormatsListener
-
-
-
+
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/routing.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/routing.xml
index 78a98177287db..f13a038c2741d 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/routing.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/routing.xml
@@ -5,59 +5,45 @@
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
- Symfony\Bundle\FrameworkBundle\Routing\Router
- Symfony\Component\Routing\RequestContext
- Symfony\Bundle\FrameworkBundle\Routing\DelegatingLoader
- Symfony\Component\Config\Loader\LoaderResolver
- Symfony\Component\Routing\Loader\XmlFileLoader
- Symfony\Component\Routing\Loader\YamlFileLoader
- Symfony\Component\Routing\Loader\PhpFileLoader
Symfony\Component\Routing\Generator\UrlGenerator
Symfony\Component\Routing\Generator\UrlGenerator
Symfony\Component\Routing\Generator\Dumper\PhpGeneratorDumper
Symfony\Bundle\FrameworkBundle\Routing\RedirectableUrlMatcher
Symfony\Bundle\FrameworkBundle\Routing\RedirectableUrlMatcher
Symfony\Component\Routing\Matcher\Dumper\PhpMatcherDumper
- Symfony\Bundle\FrameworkBundle\CacheWarmer\RouterCacheWarmer
%router.cache_class_prefix%UrlMatcher
%router.cache_class_prefix%UrlGenerator
- Symfony\Component\HttpKernel\EventListener\RouterListener
localhost
http
-
+
-
+
-
+
-
+
-
-
-
-
-
-
+
-
+
%router.resource%
@@ -79,7 +65,7 @@
-
+
%router.request_context.base_url%
GET
%router.request_context.host%
@@ -88,12 +74,12 @@
%request_listener.https_port%
-
+
-
+
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd b/src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd
index 4190dad7cb787..eecbf1b653628 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd
@@ -154,13 +154,9 @@
-
-
-
-
@@ -171,16 +167,6 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/security.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/security.xml
index 2b6307a9ef5e1..89637369256e9 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/security.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/security.xml
@@ -4,13 +4,9 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
-
- Symfony\Component\Security\Core\Util\SecureRandom
-
-
-
+
%kernel.cache_dir%/secure_random.seed
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/security_csrf.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/security_csrf.xml
index 143c8a68efe83..fa8a46d9aafe8 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/security_csrf.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/security_csrf.xml
@@ -4,22 +4,16 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
-
- Symfony\Component\Security\Csrf\TokenGenerator\UriSafeTokenGenerator
- Symfony\Component\Security\Csrf\TokenStorage\SessionTokenStorage
- Symfony\Component\Security\Csrf\CsrfTokenManager
-
-
-
+
-
+
-
+
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/serializer.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/serializer.xml
index db5cdb8a54c86..d514a3666faab 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/serializer.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/serializer.xml
@@ -5,14 +5,11 @@
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
- Symfony\Component\Serializer\Serializer
- Symfony\Component\Serializer\Encoder\XmlEncoder
- Symfony\Component\Serializer\Encoder\JsonEncoder
-
+
@@ -48,11 +45,11 @@
-
+
-
+
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/services.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/services.xml
index 2021505726fef..d9c15f70d3c81 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/services.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/services.xml
@@ -4,63 +4,40 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
-
- Symfony\Component\EventDispatcher\ContainerAwareEventDispatcher
- Symfony\Component\HttpKernel\DependencyInjection\ContainerAwareHttpKernel
- Symfony\Component\Filesystem\Filesystem
- Symfony\Component\HttpKernel\CacheWarmer\CacheWarmerAggregate
- Symfony\Component\HttpKernel\CacheClearer\ChainCacheClearer
- Symfony\Component\HttpKernel\Config\FileLocator
- Symfony\Component\HttpKernel\UriSigner
- Symfony\Component\HttpFoundation\RequestStack
-
-
-
+
-
+
-
false
-
+
-
+
-
+
-
-
-
-
+
-
+
%kernel.root_dir%/Resources
-
+
%kernel.secret%
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/session.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/session.xml
index 591f92e456ddc..2a4816a2b3bf1 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/session.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/session.xml
@@ -5,59 +5,49 @@
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
- Symfony\Component\HttpFoundation\Session\Session
- Symfony\Component\HttpFoundation\Session\Flash\FlashBag
- Symfony\Component\HttpFoundation\Session\Attribute\AttributeBag
- Symfony\Component\HttpFoundation\Session\Storage\MetadataBag
_sf2_meta
- Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage
- Symfony\Component\HttpFoundation\Session\Storage\PhpBridgeSessionStorage
- Symfony\Component\HttpFoundation\Session\Storage\MockFileSessionStorage
- Symfony\Component\HttpFoundation\Session\Storage\Handler\NativeFileSessionHandler
- Symfony\Component\HttpFoundation\Session\Storage\Handler\WriteCheckSessionHandler
- Symfony\Bundle\FrameworkBundle\EventListener\SessionListener
-
+
-
+
%session.metadata.storage_key%
%session.metadata.update_threshold%
-
+
%session.storage.options%
-
+
-
+
-
+
-
+
%kernel.cache_dir%/sessions
MOCKSESSID
-
+
%session.save_path%
-
+
-
+
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/templating.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/templating.xml
index 5aeb38e284228..d4d0053c4e4bf 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/templating.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/templating.xml
@@ -4,75 +4,47 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
-
- Symfony\Bundle\FrameworkBundle\Templating\DelegatingEngine
- Symfony\Bundle\FrameworkBundle\Templating\TemplateNameParser
- Symfony\Bundle\FrameworkBundle\Templating\TemplateFilenameParser
- Symfony\Bundle\FrameworkBundle\CacheWarmer\TemplatePathsCacheWarmer
- Symfony\Bundle\FrameworkBundle\Templating\Loader\TemplateLocator
- Symfony\Bundle\FrameworkBundle\Templating\Loader\FilesystemLoader
- Symfony\Component\Templating\Loader\CacheLoader
- Symfony\Component\Templating\Loader\ChainLoader
- Symfony\Bundle\FrameworkBundle\CacheWarmer\TemplateFinder
- Symfony\Bundle\FrameworkBundle\Templating\Helper\AssetsHelper
- Symfony\Bundle\FrameworkBundle\Templating\Helper\RouterHelper
-
-
-
+
-
+
-
+
-
+
%kernel.cache_dir%
-
+
%kernel.root_dir%/Resources
-
+
-
+
-
+
%templating.loader.cache.path%
-
+
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/templating_debug.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/templating_debug.xml
index 49e79416e1eba..f2bdc45c22938 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/templating_debug.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/templating_debug.xml
@@ -4,12 +4,8 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
-
- Symfony\Bundle\FrameworkBundle\Templating\TimedPhpEngine
-
-
-
+
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/templating_php.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/templating_php.xml
index ddcccc8df6bdf..80148144cb65e 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/templating_php.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/templating_php.xml
@@ -4,23 +4,8 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
-
- Symfony\Bundle\FrameworkBundle\Templating\PhpEngine
- Symfony\Component\Templating\Helper\SlotsHelper
- Symfony\Bundle\FrameworkBundle\Templating\Helper\ActionsHelper
- Symfony\Bundle\FrameworkBundle\Templating\Helper\RequestHelper
- Symfony\Bundle\FrameworkBundle\Templating\Helper\SessionHelper
- Symfony\Bundle\FrameworkBundle\Templating\Helper\CodeHelper
- Symfony\Bundle\FrameworkBundle\Templating\Helper\TranslatorHelper
- Symfony\Bundle\FrameworkBundle\Templating\Helper\FormHelper
- Symfony\Bundle\FrameworkBundle\Templating\Helper\StopwatchHelper
- Symfony\Component\Form\Extension\Templating\TemplatingRendererEngine
- Symfony\Component\Form\FormRenderer
- Symfony\Bundle\FrameworkBundle\Templating\GlobalVariables
-
-
-
+
@@ -28,58 +13,69 @@
%kernel.charset%
-
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
-
+
%templating.helper.code.file_link_format%
%kernel.root_dir%
%kernel.charset%
-
+
-
+
-
+
-
+
%templating.helper.form.resources%
-
+
-
+
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/test.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/test.xml
index 428ba0c8ee48a..ebb311ceb0808 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/test.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/test.xml
@@ -5,26 +5,22 @@
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
- Symfony\Bundle\FrameworkBundle\Client
- Symfony\Component\BrowserKit\History
- Symfony\Component\BrowserKit\CookieJar
- Symfony\Bundle\FrameworkBundle\EventListener\TestSessionListener
-
+
%test.client.parameters%
-
+
-
+
-
+
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/translation.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/translation.xml
index 0007a360c6e46..a261284e869e6 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/translation.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/translation.xml
@@ -4,39 +4,8 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
-
- Symfony\Bundle\FrameworkBundle\Translation\Translator
- Symfony\Component\Translation\IdentityTranslator
- Symfony\Component\Translation\MessageSelector
- Symfony\Component\Translation\Loader\PhpFileLoader
- Symfony\Component\Translation\Loader\YamlFileLoader
- Symfony\Component\Translation\Loader\XliffFileLoader
- Symfony\Component\Translation\Loader\PoFileLoader
- Symfony\Component\Translation\Loader\MoFileLoader
- Symfony\Component\Translation\Loader\QtFileLoader
- Symfony\Component\Translation\Loader\CsvFileLoader
- Symfony\Component\Translation\Loader\IcuResFileLoader
- Symfony\Component\Translation\Loader\IcuDatFileLoader
- Symfony\Component\Translation\Loader\IniFileLoader
- Symfony\Component\Translation\Loader\JsonFileLoader
- Symfony\Component\Translation\Dumper\PhpFileDumper
- Symfony\Component\Translation\Dumper\XliffFileDumper
- Symfony\Component\Translation\Dumper\PoFileDumper
- Symfony\Component\Translation\Dumper\MoFileDumper
- Symfony\Component\Translation\Dumper\YamlFileDumper
- Symfony\Component\Translation\Dumper\QtFileDumper
- Symfony\Component\Translation\Dumper\CsvFileDumper
- Symfony\Component\Translation\Dumper\IniFileDumper
- Symfony\Component\Translation\Dumper\JsonFileDumper
- Symfony\Component\Translation\Dumper\IcuResFileDumper
- Symfony\Bundle\FrameworkBundle\Translation\PhpExtractor
- Symfony\Bundle\FrameworkBundle\Translation\TranslationLoader
- Symfony\Component\Translation\Extractor\ChainExtractor
- Symfony\Component\Translation\Writer\TranslationWriter
-
-
-
+
@@ -53,105 +22,105 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
-
+
-
+
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/web.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/web.xml
index 9b2f3cb3a4373..af7d37449a6cb 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/web.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/web.xml
@@ -4,37 +4,29 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
-
- Symfony\Bundle\FrameworkBundle\Controller\ControllerResolver
- Symfony\Bundle\FrameworkBundle\Controller\ControllerNameParser
- Symfony\Component\HttpKernel\EventListener\ResponseListener
- Symfony\Component\HttpKernel\EventListener\StreamedResponseListener
- Symfony\Component\HttpKernel\EventListener\LocaleListener
-
-
-
+
-
+
-
+
%kernel.charset%
-
+
-
+
%kernel.default_locale%
diff --git a/src/Symfony/Bundle/FrameworkBundle/Routing/Router.php b/src/Symfony/Bundle/FrameworkBundle/Routing/Router.php
index c0b68a2d17a46..76bf546690725 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Routing/Router.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Routing/Router.php
@@ -92,10 +92,6 @@ private function resolveParameters(RouteCollection $collection)
}
foreach ($route->getRequirements() as $name => $value) {
- if ('_scheme' === $name || '_method' === $name) {
- continue; // ignore deprecated requirements to not trigger deprecation warnings
- }
-
$route->setRequirement($name, $this->resolve($value));
}
diff --git a/src/Symfony/Bundle/FrameworkBundle/Templating/Asset/PackageFactory.php b/src/Symfony/Bundle/FrameworkBundle/Templating/Asset/PackageFactory.php
deleted file mode 100644
index 9fb97d22a5365..0000000000000
--- a/src/Symfony/Bundle/FrameworkBundle/Templating/Asset/PackageFactory.php
+++ /dev/null
@@ -1,49 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Bundle\FrameworkBundle\Templating\Asset;
-
-@trigger_error('The Symfony\Bundle\FrameworkBundle\Templating\Asset\PackageFactory is deprecated since version 2.7 and will be removed in 3.0. Use the Asset component instead.', E_USER_DEPRECATED);
-
-use Symfony\Component\DependencyInjection\ContainerInterface;
-use Symfony\Component\HttpFoundation\Request;
-use Symfony\Component\Templating\Asset\PackageInterface;
-
-/**
- * Creates packages based on whether the current request is secure.
- *
- * @author Kris Wallsmith
- *
- * @deprecated since 2.7, will be removed in 3.0. Use the Asset component instead.
- */
-class PackageFactory
-{
- private $container;
-
- public function __construct(ContainerInterface $container)
- {
- $this->container = $container;
- }
-
- /**
- * Returns either the HTTP or SSL version of an asset package.
- *
- * @param Request $request The current request
- * @param string $httpId The id for the package to use when the current request is HTTP
- * @param string $sslId The id for the package to use when the current request is SSL
- *
- * @return PackageInterface The package
- */
- public function getPackage(Request $request, $httpId, $sslId)
- {
- return $this->container->get($request->isSecure() ? $sslId : $httpId);
- }
-}
diff --git a/src/Symfony/Bundle/FrameworkBundle/Templating/Asset/PathPackage.php b/src/Symfony/Bundle/FrameworkBundle/Templating/Asset/PathPackage.php
deleted file mode 100644
index 1eb801c4546c8..0000000000000
--- a/src/Symfony/Bundle/FrameworkBundle/Templating/Asset/PathPackage.php
+++ /dev/null
@@ -1,39 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Bundle\FrameworkBundle\Templating\Asset;
-
-use Symfony\Component\HttpFoundation\Request;
-use Symfony\Component\Templating\Asset\PathPackage as BasePathPackage;
-
-@trigger_error('The Symfony\Bundle\FrameworkBundle\Templating\Asset\PathPackage is deprecated since version 2.7 and will be removed in 3.0. Use the Asset component instead.', E_USER_DEPRECATED);
-
-/**
- * The path packages adds a version and a base path to asset URLs.
- *
- * @author Kris Wallsmith
- *
- * @deprecated since 2.7, will be removed in 3.0. Use the Asset component instead.
- */
-class PathPackage extends BasePathPackage
-{
- /**
- * Constructor.
- *
- * @param Request $request The current request
- * @param string $version The version
- * @param string $format The version format
- */
- public function __construct(Request $request, $version = null, $format = null)
- {
- parent::__construct($request->getBasePath(), $version, $format);
- }
-}
diff --git a/src/Symfony/Bundle/FrameworkBundle/Templating/Debugger.php b/src/Symfony/Bundle/FrameworkBundle/Templating/Debugger.php
deleted file mode 100644
index 55471027449b9..0000000000000
--- a/src/Symfony/Bundle/FrameworkBundle/Templating/Debugger.php
+++ /dev/null
@@ -1,52 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Bundle\FrameworkBundle\Templating;
-
-@trigger_error('The '.__NAMESPACE__.'\Debugger class is deprecated since version 2.4 and will be removed in 3.0. Use the Psr\Log\LoggerInterface interface instead.', E_USER_DEPRECATED);
-
-use Symfony\Component\Templating\DebuggerInterface;
-use Psr\Log\LoggerInterface;
-
-/**
- * Binds the Symfony templating loader debugger to the Symfony logger.
- *
- * @author Fabien Potencier
- *
- * @deprecated since version 2.4, to be removed in 3.0.
- * Use Psr\Log\LoggerInterface instead.
- */
-class Debugger implements DebuggerInterface
-{
- protected $logger;
-
- /**
- * Constructor.
- *
- * @param LoggerInterface $logger A LoggerInterface instance
- */
- public function __construct(LoggerInterface $logger = null)
- {
- $this->logger = $logger;
- }
-
- /**
- * Logs a message.
- *
- * @param string $message A message to log
- */
- public function log($message)
- {
- if (null !== $this->logger) {
- $this->logger->debug($message);
- }
- }
-}
diff --git a/src/Symfony/Bundle/FrameworkBundle/Templating/Helper/AssetsHelper.php b/src/Symfony/Bundle/FrameworkBundle/Templating/Helper/AssetsHelper.php
deleted file mode 100644
index 8379c6830eb19..0000000000000
--- a/src/Symfony/Bundle/FrameworkBundle/Templating/Helper/AssetsHelper.php
+++ /dev/null
@@ -1,126 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Bundle\FrameworkBundle\Templating\Helper;
-
-use Symfony\Component\Asset\Packages;
-use Symfony\Component\Asset\VersionStrategy\StaticVersionStrategy;
-use Symfony\Component\Templating\Helper\Helper;
-
-/**
- * AssetsHelper helps manage asset URLs.
- *
- * @author Fabien Potencier
- */
-class AssetsHelper extends Helper
-{
- private $packages;
-
- public function __construct(Packages $packages)
- {
- $this->packages = $packages;
- }
-
- /**
- * Returns the public url/path of an asset.
- *
- * If the package used to generate the path is an instance of
- * UrlPackage, you will always get a URL and not a path.
- *
- * @param string $path A public path
- * @param string $packageName The name of the asset package to use
- *
- * @return string The public path of the asset
- */
- public function getUrl($path, $packageName = null, $version = null)
- {
- // BC layer to be removed in 3.0
- if (3 === $count = func_num_args()) {
- @trigger_error('Forcing a version for an asset was deprecated in 2.7 and will be removed in 3.0.', E_USER_DEPRECATED);
-
- $args = func_get_args();
-
- return $this->getLegacyAssetUrl($path, $packageName, $args[2]);
- }
-
- return $this->packages->getUrl($path, $packageName);
- }
-
- /**
- * Returns the version of an asset.
- *
- * @param string $path A public path
- * @param string $packageName The name of the asset package to use
- *
- * @return string The asset version
- */
- public function getVersion($path = null, $packageName = null)
- {
- // no arguments means old getVersion() for default package
- if (null === $path) {
- @trigger_error('The getVersion() method requires a path as a first argument since 2.7 and will be enforced as of 3.0.', E_USER_DEPRECATED);
-
- return $this->packages->getVersion('/', $packageName);
- }
-
- // path and packageName can only be for the new version
- if (null !== $packageName) {
- return $this->packages->getVersion($path, $packageName);
- }
-
- // packageName is null and path not, so path is a path or a packageName
- try {
- $package = $this->packages->getPackage($path);
- } catch (\InvalidArgumentException $e) {
- // path is not a package, so it should be a path
- return $this->packages->getVersion($path);
- }
-
- // path is a packageName, old version
- @trigger_error('The getVersion() method requires a path as a first argument since 2.7 and will be enforced as of 3.0.', E_USER_DEPRECATED);
-
- return $this->packages->getVersion('/', $path);
- }
-
- private function getLegacyAssetUrl($path, $packageName = null, $version = null)
- {
- if ($version) {
- $package = $this->packages->getPackage($packageName);
-
- $v = new \ReflectionProperty($package, 'versionStrategy');
- $v->setAccessible(true);
-
- $currentVersionStrategy = $v->getValue($package);
-
- $f = new \ReflectionProperty($currentVersionStrategy, 'format');
- $f->setAccessible(true);
- $format = $f->getValue($currentVersionStrategy);
-
- $v->setValue($package, new StaticVersionStrategy($version, $format));
- }
-
- $url = $this->packages->getUrl($path, $packageName);
-
- if ($version) {
- $v->setValue($package, $currentVersionStrategy);
- }
-
- return $url;
- }
-
- /**
- * {@inheritdoc}
- */
- public function getName()
- {
- return 'assets';
- }
-}
diff --git a/src/Symfony/Bundle/FrameworkBundle/Templating/Helper/CodeHelper.php b/src/Symfony/Bundle/FrameworkBundle/Templating/Helper/CodeHelper.php
index b02feb54b15ad..080103d5baef5 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Templating/Helper/CodeHelper.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Templating/Helper/CodeHelper.php
@@ -154,11 +154,7 @@ public function fileExcerpt($file, $line)
*/
public function formatFile($file, $line, $text = null)
{
- if (PHP_VERSION_ID >= 50400) {
- $flags = ENT_QUOTES | ENT_SUBSTITUTE;
- } else {
- $flags = ENT_QUOTES;
- }
+ $flags = ENT_QUOTES | ENT_SUBSTITUTE;
if (null === $text) {
$file = trim($file);
@@ -198,10 +194,8 @@ public function getFileLink($file, $line)
public function formatFileFromText($text)
{
- $that = $this;
-
- return preg_replace_callback('/in ("|")?(.+?)\1(?: +(?:on|at))? +line (\d+)/s', function ($match) use ($that) {
- return 'in '.$that->formatFile($match[2], $match[3]);
+ return preg_replace_callback('/in ("|")?(.+?)\1(?: +(?:on|at))? +line (\d+)/s', function ($match) {
+ return 'in '.$this->formatFile($match[2], $match[3]);
}, $text);
}
diff --git a/src/Symfony/Bundle/FrameworkBundle/Templating/Helper/FormHelper.php b/src/Symfony/Bundle/FrameworkBundle/Templating/Helper/FormHelper.php
index 22848fcbfa35a..2bd2336ee5919 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Templating/Helper/FormHelper.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Templating/Helper/FormHelper.php
@@ -120,27 +120,6 @@ public function end(FormView $view, array $variables = array())
return $this->renderer->renderBlock($view, 'form_end', $variables);
}
- /**
- * Renders the HTML enctype in the form tag, if necessary.
- *
- * Example usage templates:
- *
- *