-
The
UniversalClassLoaderclass has been removed in favor ofClassLoader. The only difference is that some method names are different:registerNamespaces()->addPrefixes()registerPrefixes()->addPrefixes()registerNamespaces()->addPrefix()registerPrefixes()->addPrefix()getNamespaces()->getPrefixes()getNamespaceFallbacks()->getFallbackDirs()getPrefixFallbacks()->getFallbackDirs()
-
The
DebugUniversalClassLoaderclass has been removed in favor ofDebugClassLoader. The difference is that the constructor now takes a loader to wrap.
-
The methods
Form::bind()andForm::isBound()were removed. You should useForm::submit()andForm::isSubmitted()instead.Before:
$form->bind(array(...));After:
$form->submit(array(...)); -
Passing a
Symfony\Component\HttpFoundation\Requestinstance, as was supported byFormInterface::bind(), is not possible withFormInterface::submit()anymore. You should useFormInterface::handleRequest()instead.Before:
if ('POST' === $request->getMethod()) { $form->bind($request); if ($form->isValid()) { // ... } }After:
$form->handleRequest($request); if ($form->isValid()) { // ... }If you want to test whether the form was submitted separately, you can use the method
isSubmitted():$form->handleRequest($request); if ($form->isSubmitted()) { // ... if ($form->isValid()) { // ... } } -
The events PRE_BIND, BIND and POST_BIND were renamed to PRE_SUBMIT, SUBMIT and POST_SUBMIT.
Before:
$builder->addEventListener(FormEvents::PRE_BIND, function (FormEvent $event) { // ... });After:
$builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) { // ... }); -
The option "virtual" was renamed to "inherit_data".
Before:
$builder->add('address', 'form', array( 'virtual' => true, ));After:
$builder->add('address', 'form', array( 'inherit_data' => true, )); -
The class VirtualFormAwareIterator was renamed to InheritDataAwareIterator.
Before:
use Symfony\Component\Form\Util\VirtualFormAwareIterator; $iterator = new VirtualFormAwareIterator($forms);After:
use Symfony\Component\Form\Util\InheritDataAwareIterator; $iterator = new InheritDataAwareIterator($forms); -
The
TypeTestCaseclass was moved from theSymfony\Component\Form\Tests\Extension\Core\Typenamespace to theSymfony\Component\Form\Testnamespace.Before:
use Symfony\Component\Form\Tests\Extension\Core\Type\TypeTestCase class MyTypeTest extends TypeTestCase { // ... }After:
use Symfony\Component\Form\Test\TypeTestCase; class MyTypeTest extends TypeTestCase { // ... } -
The
FormItegrationTestCaseandFormPerformanceTestCaseclasses were moved form theSymfony\Component\Form\Testsnamespace to theSymfony\Component\Form\Testnamespace.
-
The
enctypemethod of theformhelper was removed. You should use the new methodstartinstead.Before:
<form method="post" action="http://example.com" <?php echo $view['form']->enctype($form) ?>> ... </form>After:
<?php echo $view['form']->start($form) ?> ... <?php echo $view['form']->end($form) ?>The method and action of the form default to "POST" and the current document. If you want to change these values, you can set them explicitly in the controller.
Alternative 1:
$form = $this->createForm('my_form', $formData, array( 'method' => 'PUT', 'action' => $this->generateUrl('target_route'), ));Alternative 2:
$form = $this->createFormBuilder($formData) // ... ->setMethod('PUT') ->setAction($this->generateUrl('target_route')) ->getForm();It is also possible to override the method and the action in the template:
<?php echo $view['form']->start($form, array('method' => 'GET', 'action' => 'http://example.com')) ?> ... <?php echo $view['form']->end($form) ?>
-
The
Symfony\Component\HttpKernel\Log\LoggerInterfacehas been removed in favor ofPsr\Log\LoggerInterface. The only difference is that some method names are different:emerg()->emergency()crit()->critical()err()->error()warn()->warning()
The previous method renames also happened to the following classes:
Symfony\Bridge\Monolog\LoggerSymfony\Component\HttpKernel\Log\NullLogger
-
The
Symfony\Component\HttpKernel\Kernel::init()method has been removed. -
The following classes have been renamed as they have been moved to the Debug component:
Symfony\Component\HttpKernel\Debug\ErrorHandler->Symfony\Component\Debug\ErrorHandlerSymfony\Component\HttpKernel\Debug\ExceptionHandler->Symfony\Component\Debug\ExceptionHandlerSymfony\Component\HttpKernel\Exception\FatalErrorException->Symfony\Component\Debug\Exception\FatalErrorExceptionSymfony\Component\HttpKernel\Exception\FlattenException->Symfony\Component\Debug\Exception\FlattenException
-
The Locale component was removed and replaced by the Intl component. Instead of the methods in
Symfony\Component\Locale\Locale, you should use these equivalent methods inSymfony\Component\Intl\Intlnow:Locale::getDisplayCountries()->Intl::getRegionBundle()->getCountryNames()Locale::getCountries()->array_keys(Intl::getRegionBundle()->getCountryNames())Locale::getDisplayLanguages()->Intl::getLanguageBundle()->getLanguageNames()Locale::getLanguages()->array_keys(Intl::getLanguageBundle()->getLanguageNames())Locale::getDisplayLocales()->Intl::getLocaleBundle()->getLocaleNames()Locale::getLocales()->array_keys(Intl::getLocaleBundle()->getLocaleNames())
-
Renamed
PropertyAccess::getPropertyAccessortocreatePropertyAccessor.Before:
use Symfony\Component\PropertyAccess\PropertyAccess; $accessor = PropertyAccess::getPropertyAccessor();After:
use Symfony\Component\PropertyAccess\PropertyAccess; $accessor = PropertyAccess::createPropertyAccessor();
-
Some route settings have been renamed:
- The
patternsetting for a route has been deprecated in favor ofpath - The
_schemeand_methodrequirements have been moved to theschemesandmethodssettings
Before:
article_edit: pattern: /article/{id} requirements: { '_method': 'POST|PUT', '_scheme': 'https', 'id': '\d+' } <route id="article_edit" pattern="/article/{id}"> <requirement key="_method">POST|PUT</requirement> <requirement key="_scheme">https</requirement> <requirement key="id">\d+</requirement> </route> $route = new Route(); $route->setPattern('/article/{id}'); $route->setRequirement('_method', 'POST|PUT'); $route->setRequirement('_scheme', 'https');After:
article_edit: path: /article/{id} methods: [POST, PUT] schemes: https requirements: { 'id': '\d+' } <route id="article_edit" path="/article/{id}" methods="POST PUT" schemes="https"> <requirement key="id">\d+</requirement> </route> $route = new Route(); $route->setPath('/article/{id}'); $route->setMethods(array('POST', 'PUT')); $route->setSchemes('https'); - The
- The
Translator::setFallbackLocale()method has been removed in favor ofTranslator::setFallbackLocales().
-
The
rendertag is deprecated in favor of therenderfunction. -
The
form_enctypehelper was removed. You should use the newform_startfunction instead.Before:
<form method="post" action="http://example.com" {{ form_enctype(form) }}> ... </form>After:
{{ form_start(form) }} ... {{ form_end(form) }}The method and action of the form default to "POST" and the current document. If you want to change these values, you can set them explicitly in the controller.
Alternative 1:
$form = $this->createForm('my_form', $formData, array( 'method' => 'PUT', 'action' => $this->generateUrl('target_route'), ));Alternative 2:
$form = $this->createFormBuilder($formData) // ... ->setMethod('PUT') ->setAction($this->generateUrl('target_route')) ->getForm();It is also possible to override the method and the action in the template:
{{ form_start(form, {'method': 'GET', 'action': 'http://example.com'}) }} ... {{ form_end(form) }}
-
The constraints
OptionalandRequiredwere moved to theSymfony\Component\Validator\Constraints\namespace. You should adapt the path wherever you used them.Before:
use Symfony\Component\Validator\Constraints as Assert; /** * @Assert\Collection({ * "foo" = @Assert\Collection\Required(), * "bar" = @Assert\Collection\Optional(), * }) */ private $property;After:
use Symfony\Component\Validator\Constraints as Assert; /** * @Assert\Collection({ * "foo" = @Assert\Required(), * "bar" = @Assert\Optional(), * }) */ private $property;
-
The ability to pass file names to
Yaml::parse()has been removed.Before:
Yaml::parse($fileName);After:
Yaml::parse(file_get_contents($fileName));