diff --git a/_build/redirection_map b/_build/redirection_map
index 006e76f890e..e9f46a06bb2 100644
--- a/_build/redirection_map
+++ b/_build/redirection_map
@@ -100,6 +100,7 @@
/cookbook/configuration/environments /configuration/environments
/cookbook/configuration/external_parameters /configuration/external_parameters
/cookbook/configuration/front_controllers_and_kernel /configuration/front_controllers_and_kernel
+/cookbook/configuration/micro-kernel-trait /configuration/micro_kernel_trait
/cookbook/configuration/index /configuration
/cookbook/configuration/override_dir_structure /configuration/override_dir_structure
/cookbook/configuration/using_parameters_in_dic /configuration/using_parameters_in_dic
@@ -213,8 +214,11 @@
/cookbook/security/force_https /security/force_https
/cookbook/security/form_login /security/form_login
/cookbook/security/form_login_setup /security/form_login_setup
+/cookbook/security/guard-authentication /security/guard_authentication
/cookbook/security/host_restriction /security/host_restriction
/cookbook/security/impersonating_user /security/impersonating_user
+/cookbook/security/ldap /security/ldap
+/cookbook/security/multiple_guard_authenticators /security/multiple_guard_authenticators
/cookbook/security/index /security
/cookbook/security/multiple_user_providers /security/multiple_user_providers
/cookbook/security/named_encoders /security/named_encoders
@@ -222,11 +226,13 @@
/cookbook/security/remember_me /security/remember_me
/cookbook/security/securing_services /security/securing_services
/cookbook/security/target_path /security/target_path
+/cookbook/security/user_checkers /security/user_checkers
/cookbook/security/voters /security/voters
/cookbook/serializer /serializer
/cookbook/service_container/compiler_passes /service_container/compiler_passes
/cookbook/service_container/index /service_container
/cookbook/service_container/scopes /service_container/scopes
+/cookbook/service_container/shared /service_container/shared
/cookbook/session/avoid_session_start /session/avoid_session_start
/cookbook/session/index /session
/cookbook/session/limit_metadata_writes /session/limit_metadata_writes
diff --git a/_images/controller/error_pages/exceptions-in-dev-environment.png b/_images/controller/error_pages/exceptions-in-dev-environment.png
index dffd1460b9b..225dcdfa0dc 100644
Binary files a/_images/controller/error_pages/exceptions-in-dev-environment.png and b/_images/controller/error_pages/exceptions-in-dev-environment.png differ
diff --git a/_images/doctrine/web_debug_toolbar.png b/_images/doctrine/web_debug_toolbar.png
index b7c5a690d72..dd5c3fffbb1 100644
Binary files a/_images/doctrine/web_debug_toolbar.png and b/_images/doctrine/web_debug_toolbar.png differ
diff --git a/_images/quick_tour/hello_fabien.png b/_images/quick_tour/hello_fabien.png
deleted file mode 100644
index 8329899b090..00000000000
Binary files a/_images/quick_tour/hello_fabien.png and /dev/null differ
diff --git a/_images/quick_tour/profiler.png b/_images/quick_tour/profiler.png
index 795f5deb05f..3b55b75f3af 100644
Binary files a/_images/quick_tour/profiler.png and b/_images/quick_tour/profiler.png differ
diff --git a/_images/quick_tour/web_debug_toolbar.png b/_images/quick_tour/web_debug_toolbar.png
index 1e2b38d06cb..86249e862f3 100644
Binary files a/_images/quick_tour/web_debug_toolbar.png and b/_images/quick_tour/web_debug_toolbar.png differ
diff --git a/_images/quick_tour/welcome.png b/_images/quick_tour/welcome.png
index 9091b6bf908..738105f715d 100644
Binary files a/_images/quick_tour/welcome.png and b/_images/quick_tour/welcome.png differ
diff --git a/_images/security/anonymous_wdt.png b/_images/security/anonymous_wdt.png
index d780c894d5a..4803ed1b108 100644
Binary files a/_images/security/anonymous_wdt.png and b/_images/security/anonymous_wdt.png differ
diff --git a/_images/security/symfony_loggedin_wdt.png b/_images/security/symfony_loggedin_wdt.png
index 7280d9978bb..6605c35edf7 100644
Binary files a/_images/security/symfony_loggedin_wdt.png and b/_images/security/symfony_loggedin_wdt.png differ
diff --git a/assetic.rst b/assetic.rst
index b9226f09d4d..59f8d06ecba 100644
--- a/assetic.rst
+++ b/assetic.rst
@@ -1,6 +1,8 @@
Assetic
=======
+.. include:: /assetic/_standard_edition_warning.rst.inc
+
.. toctree::
:maxdepth: 1
:glob:
diff --git a/assetic/_standard_edition_warning.rst.inc b/assetic/_standard_edition_warning.rst.inc
new file mode 100644
index 00000000000..f114bf2d43f
--- /dev/null
+++ b/assetic/_standard_edition_warning.rst.inc
@@ -0,0 +1,5 @@
+.. caution::
+
+ Starting from Symfony 2.8, Assetic is no longer included by default in the
+ Symfony Standard Edition. Refer to :doc:`this article `
+ to learn how to install and enable Assetic in your Symfony application.
diff --git a/assetic/apply_to_option.rst b/assetic/apply_to_option.rst
index 92bde81dd4a..b7f7b151aae 100644
--- a/assetic/apply_to_option.rst
+++ b/assetic/apply_to_option.rst
@@ -4,6 +4,8 @@
How to Apply an Assetic Filter to a specific File Extension
===========================================================
+.. include:: /assetic/_standard_edition_warning.rst.inc
+
Assetic filters can be applied to individual files, groups of files or even,
as you'll see here, files that have a specific extension. To show you how
to handle each option, suppose that you want to use Assetic's CoffeeScript
diff --git a/assetic/asset_management.rst b/assetic/asset_management.rst
index 66673ba5477..99cca285629 100644
--- a/assetic/asset_management.rst
+++ b/assetic/asset_management.rst
@@ -4,6 +4,89 @@
How to Use Assetic for Asset Management
=======================================
+Installing and Enabling Assetic
+-------------------------------
+
+Starting from Symfony 2.8, Assetic is no longer included by default in the
+Symfony Standard Edition. Before using any of its features, install the
+AsseticBundle executing this console command in your project:
+
+.. code-block:: bash
+
+ $ composer require symfony/assetic-bundle
+
+Then, enable the bundle in the ``AppKernel.php`` file of your Symfony application::
+
+ // app/AppKernel.php
+
+ // ...
+ class AppKernel extends Kernel
+ {
+ // ...
+
+ public function registerBundles()
+ {
+ $bundles = array(
+ // ...
+ new Symfony\Bundle\AsseticBundle\AsseticBundle(),
+ );
+
+ // ...
+ }
+ }
+
+Finally, add the following minimal configuration to enable Assetic support in
+your application:
+
+.. configuration-block::
+
+ .. code-block:: yaml
+
+ # app/config/config.yml
+ assetic:
+ debug: '%kernel.debug%'
+ use_controller: '%kernel.debug%'
+ filters:
+ cssrewrite: ~
+
+ # ...
+
+ .. code-block:: xml
+
+
+
+
+
+
+
+
+
+
+
+
+ .. code-block:: php
+
+ // app/config/config.php
+ $container->loadFromExtension('assetic', array(
+ 'debug' => '%kernel.debug%',
+ 'use_controller' => '%kernel.debug%',
+ 'filters' => array(
+ 'cssrewrite' => null,
+ ),
+ // ...
+ ));
+
+ // ...
+
+Introducing Assetic
+-------------------
+
Assetic combines two major ideas: :ref:`assets ` and
:ref:`filters `. The assets are files such as CSS,
JavaScript and image files. The filters are things that can be applied to
@@ -515,7 +598,7 @@ each time you deploy), you should run the following command:
.. code-block:: bash
- $ php app/console assetic:dump --env=prod --no-debug
+ $ php bin/console assetic:dump --env=prod --no-debug
This will physically generate and write each file that you need (e.g. ``/js/abcd123.js``).
If you update any of your assets, you'll need to run this again to regenerate
@@ -567,7 +650,7 @@ need to dump them manually. To do so, run the following command:
.. code-block:: bash
- $ php app/console assetic:dump
+ $ php bin/console assetic:dump
This physically writes all of the asset files you need for your ``dev``
environment. The big disadvantage is that you need to run this each time
@@ -576,7 +659,7 @@ assets will be regenerated automatically *as they change*:
.. code-block:: bash
- $ php app/console assetic:watch
+ $ php bin/console assetic:watch
The ``assetic:watch`` command was introduced in AsseticBundle 2.4. In prior
versions, you had to use the ``--watch`` option of the ``assetic:dump``
diff --git a/assetic/jpeg_optimize.rst b/assetic/jpeg_optimize.rst
index 8d94266ae8e..7fc039e3f17 100644
--- a/assetic/jpeg_optimize.rst
+++ b/assetic/jpeg_optimize.rst
@@ -4,6 +4,8 @@
How to Use Assetic for Image Optimization with Twig Functions
=============================================================
+.. include:: /assetic/_standard_edition_warning.rst.inc
+
Among its many filters, Assetic has four filters which can be used for on-the-fly
image optimization. This allows you to get the benefits of smaller file sizes
without having to use an image editor to process each image. The results
diff --git a/assetic/php.rst b/assetic/php.rst
index 3b2ea99e5b1..68afb9788bd 100644
--- a/assetic/php.rst
+++ b/assetic/php.rst
@@ -4,6 +4,8 @@
Combining, Compiling and Minimizing Web Assets with PHP Libraries
=================================================================
+.. include:: /assetic/_standard_edition_warning.rst.inc
+
The official Symfony Best Practices recommend to use Assetic to
:doc:`manage web assets `, unless you are
comfortable with JavaScript-based front-end tools.
diff --git a/assetic/uglifyjs.rst b/assetic/uglifyjs.rst
index 0e6d50ae7b3..b2ec9c5eb58 100644
--- a/assetic/uglifyjs.rst
+++ b/assetic/uglifyjs.rst
@@ -4,6 +4,8 @@
How to Minify CSS/JS Files (Using UglifyJS and UglifyCSS)
=========================================================
+.. include:: /assetic/_standard_edition_warning.rst.inc
+
`UglifyJS`_ is a JavaScript parser/compressor/beautifier toolkit. It can be used
to combine and minify JavaScript assets so that they require less HTTP requests
and make your site load faster. `UglifyCSS`_ is a CSS compressor/beautifier
diff --git a/assetic/yuicompressor.rst b/assetic/yuicompressor.rst
index 392db7cdeee..9b83aa99f48 100644
--- a/assetic/yuicompressor.rst
+++ b/assetic/yuicompressor.rst
@@ -10,6 +10,8 @@ How to Minify JavaScripts and Stylesheets with YUI Compressor
**strongly advised to avoid using YUI utilities** unless strictly necessary.
Read :doc:`/assetic/uglifyjs` for a modern and up-to-date alternative.
+.. include:: /assetic/_standard_edition_warning.rst.inc
+
Yahoo! provides an excellent utility for minifying JavaScripts and stylesheets
so they travel over the wire faster, the `YUI Compressor`_. Thanks to Assetic,
you can take advantage of this tool very easily.
diff --git a/best_practices/business-logic.rst b/best_practices/business-logic.rst
index b05ec44df1b..08f0e678762 100644
--- a/best_practices/business-logic.rst
+++ b/best_practices/business-logic.rst
@@ -21,6 +21,8 @@ Inside here, you can create whatever directories you want to organize things:
│ └─ AppBundle/
│ └─ Utils/
│ └─ MyClass.php
+ ├─ tests/
+ ├─ var/
├─ vendor/
└─ web/
@@ -40,6 +42,8 @@ and put things there:
│ │ └─ Utils/
│ │ └─ MyClass.php
│ └─ AppBundle/
+ ├─ tests/
+ ├─ var/
├─ vendor/
└─ web/
@@ -318,7 +322,7 @@ command:
.. code-block:: bash
- $ php app/console doctrine:fixtures:load
+ $ php bin/console doctrine:fixtures:load
Careful, database will be purged. Do you want to continue Y/N ? Y
> purging database
diff --git a/best_practices/configuration.rst b/best_practices/configuration.rst
index 8139c22e60a..3fcb46bf586 100644
--- a/best_practices/configuration.rst
+++ b/best_practices/configuration.rst
@@ -52,8 +52,8 @@ Canonical Parameters
Define all your application's parameters in the
``app/config/parameters.yml.dist`` file.
-Since version 2.3, Symfony includes a configuration file called ``parameters.yml.dist``,
-which stores the canonical list of configuration parameters for the application.
+Symfony includes a configuration file called ``parameters.yml.dist``, which
+stores the canonical list of configuration parameters for the application.
Whenever a new configuration parameter is defined for the application, you
should also add it to this file and submit the changes to your version control
diff --git a/best_practices/creating-the-project.rst b/best_practices/creating-the-project.rst
index c70df8db7bd..e19e6ebe872 100644
--- a/best_practices/creating-the-project.rst
+++ b/best_practices/creating-the-project.rst
@@ -27,7 +27,6 @@ to create files and execute the following commands:
.. code-block:: bash
- # Linux, Mac OS X
$ cd projects/
$ symfony new blog
@@ -63,13 +62,18 @@ number of files and directories generated automatically:
blog/
├─ app/
- │ ├─ console
- │ ├─ cache/
│ ├─ config/
- │ ├─ logs/
│ └─ Resources/
+ ├─ bin
+ │ └─ console
├─ src/
│ └─ AppBundle/
+ ├─ var/
+ │ ├─ cache/
+ │ ├─ logs/
+ │ └─ sessions/
+ ├─ tests/
+ │ └─ AppBundle/
├─ vendor/
└─ web/
@@ -77,13 +81,16 @@ This file and directory hierarchy is the convention proposed by Symfony to
structure your applications. The recommended purpose of each directory is the
following:
-* ``app/cache/``, stores all the cache files generated by the application;
* ``app/config/``, stores all the configuration defined for any environment;
-* ``app/logs/``, stores all the log files generated by the application;
* ``app/Resources/``, stores all the templates and the translation files for the
application;
* ``src/AppBundle/``, stores the Symfony specific code (controllers and routes),
your domain code (e.g. Doctrine classes) and all your business logic;
+* ``var/cache/``, stores all the cache files generated by the application;
+* ``var/logs/``, stores all the log files generated by the application;
+* ``var/sessions/``, stores all the session files generated by the application;
+* ``tests/AppBundle/``, stores the automatic tests (e.g. Unit tests) of the
+ application.
* ``vendor/``, this is the directory where Composer installs the application's
dependencies and you should never modify any of its contents;
* ``web/``, stores all the front controller files and all the web assets, such
@@ -107,8 +114,7 @@ ProductBundle, then there's no advantage to having two separate bundles.
Create only one bundle called AppBundle for your application logic.
Implementing a single AppBundle bundle in your projects will make your code
-more concise and easier to understand. Starting in Symfony 2.6, the official
-Symfony documentation uses the AppBundle name.
+more concise and easier to understand.
.. note::
@@ -128,13 +134,18 @@ that follows these best practices:
blog/
├─ app/
- │ ├─ console
- │ ├─ cache/
│ ├─ config/
- │ ├─ logs/
│ └─ Resources/
+ ├─ bin/
+ │ └─ console
├─ src/
│ └─ AppBundle/
+ ├─ tests/
+ │ └─ AppBundle/
+ ├─ var/
+ │ ├─ cache/
+ │ ├─ logs/
+ └─ sessions/
├─ vendor/
└─ web/
├─ app.php
@@ -147,7 +158,7 @@ that follows these best practices:
.. code-block:: bash
- $ php app/console generate:bundle --namespace=AppBundle --dir=src --format=annotation --no-interaction
+ $ php bin/console generate:bundle --namespace=AppBundle --dir=src --format=annotation --no-interaction
Extending the Directory Structure
---------------------------------
@@ -157,27 +168,6 @@ structure of Symfony, you can
:doc:`override the location of the main directories `:
``cache/``, ``logs/`` and ``web/``.
-In addition, Symfony3 will use a slightly different directory structure when
-it's released:
-
-.. code-block:: text
-
- blog-symfony3/
- ├─ app/
- │ ├─ config/
- │ └─ Resources/
- ├─ bin/
- │ └─ console
- ├─ src/
- ├─ var/
- │ ├─ cache/
- │ └─ logs/
- ├─ vendor/
- └─ web/
-
-The changes are pretty superficial, but for now, we recommend that you use
-the Symfony directory structure.
-
.. _`Composer`: https://getcomposer.org/
.. _`Phar extension`: http://php.net/manual/en/intro.phar.php
.. _`public checksums repository`: https://github.com/sensiolabs/checksums
diff --git a/best_practices/forms.rst b/best_practices/forms.rst
index 6722d09cb58..d63bf8faccb 100644
--- a/best_practices/forms.rst
+++ b/best_practices/forms.rst
@@ -22,6 +22,9 @@ form in its own PHP class::
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
+ use Symfony\Component\Form\Extension\Core\Type\TextareaType;
+ use Symfony\Component\Form\Extension\Core\Type\EmailType;
+ use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
class PostType extends AbstractType
{
@@ -29,10 +32,10 @@ form in its own PHP class::
{
$builder
->add('title')
- ->add('summary', 'textarea')
- ->add('content', 'textarea')
- ->add('authorEmail', 'email')
- ->add('publishedAt', 'datetime')
+ ->add('summary', TextareaType::class)
+ ->add('content', TextareaType::class)
+ ->add('authorEmail', EmailType::class)
+ ->add('publishedAt', DateTimeType::class)
;
}
@@ -42,11 +45,6 @@ form in its own PHP class::
'data_class' => 'AppBundle\Entity\Post'
));
}
-
- public function getName()
- {
- return 'post';
- }
}
.. best-practice::
@@ -54,7 +52,7 @@ form in its own PHP class::
Put the form type classes in the ``AppBundle\Form`` namespace, unless you
use other custom form classes like data transformers.
-To use the class, use ``createForm()`` and instantiate the new class::
+To use the class, use ``createForm()`` and pass the fully qualified class name::
// ...
use AppBundle\Form\PostType;
@@ -63,7 +61,7 @@ To use the class, use ``createForm()`` and instantiate the new class::
public function newAction(Request $request)
{
$post = new Post();
- $form = $this->createForm(new PostType(), $post);
+ $form = $this->createForm(PostType::class, $post);
// ...
}
@@ -71,15 +69,10 @@ To use the class, use ``createForm()`` and instantiate the new class::
Registering Forms as Services
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-You can also
-:ref:`register your form type as a service `.
-But this is *not* recommended unless you plan to reuse the new form type in many
-places or embed it in other forms directly or via the
-:doc:`collection type `.
-
-For most forms that are used only to edit or create something, registering
-the form as a service is over-kill, and makes it more difficult to figure
-out exactly which form class is being used in a controller.
+You can also :ref:`register your form type as a service `.
+This is only needed if your form type requires some dependencies to be injected
+by the container, otherwise it is unnecessary overhead and therefore *not*
+recommended to do this for all form type classes.
Form Button Configuration
-------------------------
@@ -91,9 +84,10 @@ makes them easier to re-use later.
Add buttons in the templates, not in the form classes or the controllers.
-Since Symfony 2.3, you can add buttons as fields on your form. This is a nice
-way to simplify the template that renders your form. But if you add the buttons
-directly in your form class, this would effectively limit the scope of that form:
+The Symfony Form component allows you to add buttons as fields on your form.
+This is a nice way to simplify the template that renders your form. But if you
+add the buttons directly in your form class, this would effectively limit the
+scope of that form:
.. code-block:: php
@@ -103,7 +97,7 @@ directly in your form class, this would effectively limit the scope of that form
{
$builder
// ...
- ->add('save', 'submit', array('label' => 'Create Post'))
+ ->add('save', SubmitType::class, array('label' => 'Create Post'))
;
}
@@ -118,6 +112,7 @@ some developers configure form buttons in the controller::
use Symfony\Component\HttpFoundation\Request;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
+ use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use AppBundle\Entity\Post;
use AppBundle\Form\PostType;
@@ -128,8 +123,8 @@ some developers configure form buttons in the controller::
public function newAction(Request $request)
{
$post = new Post();
- $form = $this->createForm(new PostType(), $post);
- $form->add('submit', 'submit', array(
+ $form = $this->createForm(PostType::class, $post);
+ $form->add('submit', SubmitType::class, array(
'label' => 'Create',
'attr' => array('class' => 'btn btn-default pull-right')
));
@@ -212,21 +207,3 @@ Second, we recommend using ``$form->isSubmitted()`` in the ``if`` statement
for clarity. This isn't technically needed, since ``isValid()`` first calls
``isSubmitted()``. But without this, the flow doesn't read well as it *looks*
like the form is *always* processed (even on the GET request).
-
-Custom Form Field Types
------------------------
-
-.. best-practice::
-
- Add the ``app_`` prefix to your custom form field types to avoid collisions.
-
-Custom form field types inherit from the ``AbstractType`` class, which defines the
-``getName()`` method to configure the name of that form type. These names must
-be unique in the application.
-
-If a custom form type uses the same name as any of the Symfony's built-in form
-types, it will override it. The same happens when the custom form type matches
-any of the types defined by the third-party bundles installed in your application.
-
-Add the ``app_`` prefix to your custom form field types to avoid name collisions
-that can lead to hard to debug errors.
diff --git a/best_practices/i18n.rst b/best_practices/i18n.rst
index cfbd5fb47e2..39473373df1 100644
--- a/best_practices/i18n.rst
+++ b/best_practices/i18n.rst
@@ -32,9 +32,9 @@ Of all the available translation formats, only XLIFF and gettext have broad
support in the tools used by professional translators. And since it's based
on XML, you can validate XLIFF file contents as you write them.
-Symfony 2.6 added support for notes inside XLIFF files, making them more
-user-friendly for translators. At the end, good translations are all about
-context, and these XLIFF notes allow you to define that context.
+Symfony supports notes in XLIFF files, making them more user-friendly for
+translators. At the end, good translations are all about context, and these
+XLIFF notes allow you to define that context.
.. tip::
diff --git a/best_practices/introduction.rst b/best_practices/introduction.rst
index 2c5661c6671..dad135249e6 100644
--- a/best_practices/introduction.rst
+++ b/best_practices/introduction.rst
@@ -76,12 +76,8 @@ installer and then execute this command to download the demo application:
.. code-block:: bash
- # Linux and Mac OS X
$ symfony demo
- # Windows
- c:\> php symfony demo
-
**The demo application is a simple blog engine**, because that will allow us to
focus on the Symfony concepts and features without getting buried in difficult
implementation details. Instead of developing the application step by step in
diff --git a/best_practices/security.rst b/best_practices/security.rst
index 00b52f9910b..fcc991c1e9d 100644
--- a/best_practices/security.rst
+++ b/best_practices/security.rst
@@ -264,37 +264,65 @@ the same ``getAuthorEmail`` logic you used above:
namespace AppBundle\Security;
- use Symfony\Component\Security\Core\Authorization\Voter\AbstractVoter;
+ use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
+ use Symfony\Component\Security\Core\Authorization\AccessDecisionManagerInterface;
+ use Symfony\Component\Security\Core\Authorization\Voter\Voter;
use Symfony\Component\Security\Core\User\UserInterface;
+ use AppBundle\Entity\Post;
- // AbstractVoter class requires Symfony 2.6 or higher version
- class PostVoter extends AbstractVoter
+ class PostVoter extends Voter
{
const CREATE = 'create';
const EDIT = 'edit';
- protected function getSupportedAttributes()
+ /**
+ * @var AccessDecisionManagerInterface
+ */
+ private $decisionManager;
+
+ public function __construct(AccessDecisionManagerInterface $decisionManager)
{
- return array(self::CREATE, self::EDIT);
+ $this->decisionManager = $decisionManager;
}
- protected function getSupportedClasses()
+ protected function supports($attribute, $subject)
{
- return array('AppBundle\Entity\Post');
+ if (!in_array($attribute, array(self::CREATE, self::EDIT))) {
+ return false;
+ }
+
+ if (!$subject instanceof Post) {
+ return false;
+ }
+
+ return true;
}
- protected function isGranted($attribute, $post, $user = null)
+ protected function voteOnAttribute($attribute, $subject, TokenInterface $token)
{
+ $user = $token->getUser();
+ /** @var Post */
+ $post = $subject; // $subject must be a Post instance, thanks to the supports method
+
if (!$user instanceof UserInterface) {
return false;
}
- if ($attribute === self::CREATE && in_array('ROLE_ADMIN', $user->getRoles(), true)) {
- return true;
- }
-
- if ($attribute === self::EDIT && $user->getEmail() === $post->getAuthorEmail()) {
- return true;
+ switch ($attribute) {
+ case self::CREATE:
+ // if the user is an admin, allow them to create new posts
+ if ($this->decisionManager->decide($token, array('ROLE_ADMIN'))) {
+ return true;
+ }
+
+ break;
+ case self::EDIT:
+ // if the user is the author of the post, allow them to edit the posts
+ if ($user->getEmail() === $post->getAuthorEmail()) {
+ return true;
+ }
+
+ break;
}
return false;
@@ -310,6 +338,7 @@ To enable the security voter in the application, define a new service:
# ...
post_voter:
class: AppBundle\Security\PostVoter
+ arguments: ['@security.access.decision_manager']
public: false
tags:
- { name: security.voter }
@@ -337,7 +366,7 @@ via the even easier shortcut in a controller:
*/
public function editAction($id)
{
- $post = // query for the post ...
+ $post = ...; // query for the post
$this->denyAccessUnlessGranted('edit', $post);
diff --git a/best_practices/tests.rst b/best_practices/tests.rst
index 1f41afb9de7..1e9490d7aac 100644
--- a/best_practices/tests.rst
+++ b/best_practices/tests.rst
@@ -28,8 +28,8 @@ functional tests, you can quickly spot any big errors before you deploy them:
A functional test can be as easy as this::
- // src/AppBundle/Tests/ApplicationAvailabilityFunctionalTest.php
- namespace AppBundle\Tests;
+ // tests/AppBundle/ApplicationAvailabilityFunctionalTest.php
+ namespace Tests\AppBundle;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
diff --git a/best_practices/web-assets.rst b/best_practices/web-assets.rst
index 62398ebed93..7c3fe8a7ee0 100644
--- a/best_practices/web-assets.rst
+++ b/best_practices/web-assets.rst
@@ -35,6 +35,8 @@ much more concise:
Using Assetic
-------------
+.. include:: /assetic/_standard_edition_warning.rst.inc
+
These days, you probably can't simply create static CSS and JavaScript files
and include them in your template. Instead, you'll probably want to combine
and minify these to improve client-side performance. You may also want to
diff --git a/bundles.rst b/bundles.rst
index f73cdf54e99..7e7decbc1dc 100644
--- a/bundles.rst
+++ b/bundles.rst
@@ -40,7 +40,6 @@ the ``registerBundles()`` method of the ``AppKernel`` class::
new Symfony\Bundle\MonologBundle\MonologBundle(),
new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
new Symfony\Bundle\DoctrineBundle\DoctrineBundle(),
- new Symfony\Bundle\AsseticBundle\AsseticBundle(),
new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
new AppBundle\AppBundle(),
);
@@ -107,6 +106,7 @@ Now that you've created the bundle, enable it via the ``AppKernel`` class::
{
$bundles = array(
// ...
+
// register your bundle
new Acme\TestBundle\AcmeTestBundle(),
);
@@ -122,7 +122,7 @@ generating a basic bundle skeleton:
.. code-block:: bash
- $ php app/console generate:bundle --namespace=Acme/TestBundle
+ $ php bin/console generate:bundle --namespace=Acme/TestBundle
The bundle skeleton generates a basic controller, template and routing
resource that can be customized. You'll learn more about Symfony's command-line
diff --git a/bundles/best_practices.rst b/bundles/best_practices.rst
index 6d0b7aff034..d245763b35e 100644
--- a/bundles/best_practices.rst
+++ b/bundles/best_practices.rst
@@ -414,55 +414,6 @@ The ``composer.json`` file should include at least the following metadata:
In order to make it easier for developers to find your bundle, register it on
`Packagist`_, the official repository for Composer packages.
-Custom Validation Constraints
------------------------------
-
-Starting with Symfony 2.5, a new Validation API was introduced. In fact,
-there are 3 modes, which the user can configure in their project:
-
-* 2.4: the original 2.4 and earlier validation API;
-* 2.5: the new 2.5 and later validation API;
-* 2.5-BC: the new 2.5 API with a backwards-compatible layer so that the
- 2.4 API still works. This is only available in PHP 5.3.9+.
-
-.. note::
-
- Starting with Symfony 2.7, the support for the 2.4 API has been
- dropped and the minimal PHP version required for Symfony was
- increased to 5.3.9. If your bundles requires Symfony >=2.7, you
- don't need to take care about the 2.4 API anymore.
-
-As a bundle author, you'll want to support *both* API's, since some users
-may still be using the 2.4 API. Specifically, if your bundle adds a violation
-directly to the :class:`Symfony\\Component\\Validator\\Context\\ExecutionContext`
-(e.g. like in a custom validation constraint), you'll need to check for which
-API is being used. The following code, would work for *all* users::
-
- use Symfony\Component\Validator\ConstraintValidator;
- use Symfony\Component\Validator\Constraint;
- use Symfony\Component\Validator\Context\ExecutionContextInterface;
- // ...
-
- class ContainsAlphanumericValidator extends ConstraintValidator
- {
- public function validate($value, Constraint $constraint)
- {
- if ($this->context instanceof ExecutionContextInterface) {
- // the 2.5 API
- $this->context->buildViolation($constraint->message)
- ->setParameter('%string%', $value)
- ->addViolation()
- ;
- } else {
- // the 2.4 API
- $this->context->addViolation(
- $constraint->message,
- array('%string%' => $value)
- );
- }
- }
- }
-
Learn more
----------
diff --git a/bundles/installation.rst b/bundles/installation.rst
index 80dfafc008e..1c97cfad435 100644
--- a/bundles/installation.rst
+++ b/bundles/installation.rst
@@ -108,14 +108,14 @@ via the ``config:dump-reference`` command:
.. code-block:: bash
- $ app/console config:dump-reference AsseticBundle
+ $ bin/console config:dump-reference AsseticBundle
Instead of the full bundle name, you can also pass the short name used as the root
of the bundle's configuration:
.. code-block:: bash
- $ app/console config:dump-reference assetic
+ $ bin/console config:dump-reference assetic
The output will look like this:
diff --git a/bundles/override.rst b/bundles/override.rst
index 933adbd1d92..d67a47154f6 100644
--- a/bundles/override.rst
+++ b/bundles/override.rst
@@ -105,17 +105,16 @@ associations. Learn more about this feature and its limitations in
Forms
-----
-In order to override a form type, it has to be registered as a service (meaning
-it is tagged as ``form.type``). You can then override it as you would override any
-service as explained in `Services & Configuration`_. This, of course, will only
-work if the type is referred to by its alias rather than being instantiated,
-e.g.::
+Form types are referred to by their fully-qualified class name::
- $builder->add('name', 'custom_type');
+ $builder->add('name', CustomType::class);
-rather than::
+This means that you cannot override this by creating a sub-class of ``CustomType``
+and registering it as a service and tagging it with ``form.type`` (you *could*
+do this in earlier version).
- $builder->add('name', new CustomType());
+Instead, you should use a "form type extension" to modify the existing form type.
+For more information, see :doc:`/form/create_form_type_extension`.
.. _override-validation:
diff --git a/changelog.rst b/changelog.rst
index d4aa9c0a289..3fd24562c87 100644
--- a/changelog.rst
+++ b/changelog.rst
@@ -19,6 +19,7 @@ July, 2016
New Documentation
~~~~~~~~~~~~~~~~~
+* `#6744 `_ [Form] Ambiguous block prefixes render incorrectly (foaly-nr1)
* `#6611 `_ Discourage the use of controllers as services (javiereguiluz)
* `#5672 `_ Add constants to BC promise (WouterJ)
* `#6707 `_ Describe serialization config location in cookbook (jcrombez, WouterJ)
@@ -32,13 +33,17 @@ Fixed Documentation
* `#6634 `_ Update custom_constraint.rst (axelvnk)
* `#6719 `_ [Components][Browser-Kit]Fix typo with CookieJar (Denis-Florin Rendler)
* `#6687 `_ Namespace fix (JhonnyL)
+* `#6714 `_ UppercaseRot13Transformer wrong class name used (jevgenijusr)
* `#6704 `_ Encountered an error when following the steps for contribution (chancegarcia)
+* `#6708 `_ Routes should be just imported, not mounted (OndraM)
Minor Documentation Changes
~~~~~~~~~~~~~~~~~~~~~~~~~~~
* `#6778 `_ fix syntax errors (xabbuh)
* `#6777 `_ fix code block indentation (xabbuh)
+* `#109 `_ after merge fixes (xabbuh)
+* `#107 `_ fix bugs due to choosing the wrong base branch (xabbuh)
* `#108 `_ fix another bug due to choosing the wrong branch (xabbuh)
* `#105 `_ fix bugs due to choosing the wrong base branch (xabbuh)
* `#102 `_ Updated the Global Composer Installation article (javiereguiluz)
@@ -53,6 +58,7 @@ Minor Documentation Changes
* `#91 `_ Create a section for "Getting Started" so we can generate a book (javiereguiluz)
* `#77 `_ Proofing the controller chapter (weaverryan)
* `#90 `_ Fixed doc build issues (javiereguiluz)
+* `#82 `_ Bootstrapping property info doc (weaverryan)
* `#79 `_ Shortening the setup section (weaverryan)
* `#81 `_ Merging setup and install directories (weaverryan)
* `#84 `_ Bootstrapping the validator components (weaverryan)
@@ -79,6 +85,7 @@ Minor Documentation Changes
* `#6600 `_ Removing some extra details from #6444 (weaverryan)
* `#6715 `_ [Book] Remove DI extension info and link the cookbook article instead (WouterJ)
* `#6745 `_ Branch fix (Talita Kocjan Zager, weaverryan)
+* `#6743 `_ Finishing #6252 (Talita Kocjan Zager, weaverryan)
* `#6656 `_ Clarify usage of handler channel configuration (shkkmo)
* `#6664 `_ replace occurrences of `_ Add little comment indicating meaning of $firewall variable (ruslan-fidesio, WouterJ)
@@ -98,10 +105,12 @@ Minor Documentation Changes
* `#6613 `_ Clarify documentation on serving files (raphaelm)
* `#6721 `_ [Finder] Fixed typo in RealPath method on SplFileInfo class (acrobat)
* `#6716 `_ Typo fix "they the name" => "that the name" (jevgenijusr)
+* `#6702 `_ Removed empty ``Notes on previous versions`` (mickaelandrieu)
* `#6709 `_ Fix URL in http basic screenshot (WouterJ)
* `#6706 `_ Update "How to Authenticate Users with API Keys" (gondo, WouterJ)
* `#5892 `_ Updated the session proxy article (javiereguiluz)
* `#6697 `_ [Asset] add versionadded directive (xabbuh)
+* `#6698 `_ [Ldap] add versionadded directive (xabbuh)
June, 2016
@@ -110,6 +119,7 @@ June, 2016
New Documentation
~~~~~~~~~~~~~~~~~
+* `#6690 `_ Added an example for a different method of verbosity level usage. (smatyas)
* `#6587 `_ Updating recommended email settings for monolog (jorgelbg)
Fixed Documentation
@@ -123,7 +133,9 @@ Minor Documentation Changes
* `#6597 `_ [Validator] Add shorter examples using the default option (alexmart)
* `#6696 `_ Typo fix (jevgenijusr)
+* `#6693 `_ Add missing parameter (rodnaph)
* `#6614 `_ Updated the CS rule about return null; and return; (javiereguiluz)
+* `#6680 `_ Fix ldap security examples (jvasseur)
* `#6692 `_ Update date.rst - Fixes typo (fdarre)
* `#6689 `_ Hard values for the driver option (iltar)
* `#6685 `_ NullOutput should be passed to $command->run() (Ma27)
@@ -140,11 +152,13 @@ Minor Documentation Changes
* `#6652 `_ ``Finder::path()`` method matching directories and files (soyuka)
* `#6662 `_ preg_match throw an warning (nicolae-stelian)
* `#6658 `_ [Process] tweak a sentence (xabbuh)
+* `#6599 `_ Fixed null description of query_builder option (HeahDude)
* `#6638 `_ swap terminate and exception event descriptions (xabbuh)
* `#6615 `_ Minor grammar fix (aalaap)
* `#6637 `_ Update security.rst (norbert-n)
* `#6644 `_ [Console] Fix wrong quotes in QuestionHelper::setInputStream() (chalasr)
* `#6645 `_ Fix bootstrap class name help-block (foaly-nr1)
+* `#6642 `_ do not reference unused interface (xabbuh)
* `#6641 `_ [Book][Form] fix reference to renamed document (xabbuh)
* `#6579 `_ Added callable validation_groups example (gnat42)
* `#6626 `_ reflect the EOM of Symfony 2.3 (xabbuh)
@@ -160,22 +174,28 @@ May, 2016
New Documentation
~~~~~~~~~~~~~~~~~
+* `#6402 `_ [RFR] Documentation for the Ldap component (csarrazi)
* `#6040 `_ Remove old File Upload article + improve the new one (WouterJ)
* `#6412 `_ added a maintenance document (fabpot)
* `#6554 `_ Adding information about using the date type as usable date picker field (weaverryan)
* `#6590 `_ Added note on YAML mappings as objects (dantleech)
+* `#6378 `_ refs #5898 Fix updates of testing.rst for 3.0 (guilliamxavier)
* `#6583 `_ Adding a description for the use_microseconds parameter introduced in MonologBundle v2.11 (jorgelbg)
* `#6582 `_ Advanced YAML component usage (dantleech)
+* `#6594 `_ Allowed to return null for query_builder (JonEastman)
* `#6405 `_ Added the explanation about addClassesToCompile() method (javiereguiluz)
* `#6539 `_ Documented the "autoescape" TwigBundle config option (javiereguiluz)
* `#5574 `_ [2.7] Update Twig docs for asset features (javiereguiluz, WouterJ)
+* `#6302 `_ [Form] add ``choice_translation_domain`` option to date types (HeahDude)
Fixed Documentation
~~~~~~~~~~~~~~~~~~~
* `#6619 `_ Fix wrong variable name in comment (zanardigit)
+* `#6608 `_ deprecated 'datettime' Form Type (dsmink)
* `#6606 `_ fix #6602 (yamiko-ninja)
* `#6578 `_ [Cookbook][Profiler] Fix arguments for Profiler::find() (hason)
+* `#6546 `_ Make ClockMock Tests\\ namespace matching less specific (teohhanhui)
* `#6564 `_ [PhpUnitBridge] Remove section about clock mocking (z38)
* `#6552 `_ Typo fix in the Serializer deserialization example for existing object (fre5h)
* `#6545 `_ Replace property_accessor by property_access (jbenoit2011)
@@ -184,9 +204,12 @@ Fixed Documentation
Minor Documentation Changes
~~~~~~~~~~~~~~~~~~~~~~~~~~~
+* `#6601 `_ Deprecated usage of AsseticBundle removed from bundles.rst (Vehsamrak)
+* `#6624 `_ remove versionadded directive for 2.x features (xabbuh)
* `#6620 `_ Move PSR to correct place on index page (WouterJ)
* `#6609 `_ Use a better escaping mechanism for data-prototype attr (javiereguiluz)
* `#6380 `_ [book] [validation] Constraints can be applied to an entire class too (sustmi)
+* `#6459 `_ Remove choices as values in 3.0 (weaverryan)
* `#6444 `_ [Form] fixed EntityType choice options (HeahDude)
* `#6367 `_ Simplified the contribution article for Symfony Docs (javiereguiluz)
* `#6419 `_ Update routing.rst (tamtamchik)
@@ -207,15 +230,23 @@ Minor Documentation Changes
* `#6553 `_ EntityType: query_builder link to usage (weaverryan)
* `#6572 `_ Edited BowerPHP tip (SecondeJK)
* `#6575 `_ Rename command logging services (sroze)
+* `#6577 `_ [Cookbook][Profiler] Remove mention of import/export (hason)
* `#6571 `_ [Cookbook][Console] Minor: Fix typo (andreia)
+* `#6570 `_ Fix typo (jdreesen)
* `#6568 `_ fix RequestDataCollector class namespace (xabbuh)
* `#6566 `_ Update options_resolver.rst (snake77se)
+* `#6548 `_ merge choice_translation_domain files (xabbuh)
+* `#6547 `_ remove 2.x versionadded directives (xabbuh)
+* `#6563 `_ [PhpUnitBridge] Add versionadded directive to clock mocking section (z38)
+* `#6549 `_ drop AppBundle examples in components section (xabbuh)
* `#6562 `_ Remove extra spaces in Nginx template (bocharsky-bw)
* `#6557 `_ [ClassLoader] Add missed link to the external PSR-4 specification (nicolas-grekas, fre5h)
* `#6511 `_ [DependencyInjection] Improved "optional argument" documentation (dantleech)
* `#6455 `_ Editing the Doctrine section to improve accuracy and readability (natechicago)
* `#6526 `_ Documented how to configure Symfony correctly with regards to the Forwarded header (magnusnordlander)
* `#6535 `_ Improved the description of the Twig global variables (javiereguiluz)
+* `#6536 `_ [DomCrawler] Removed references to CssSelector (aerialls)
+* `#6529 `_ [DependencyInjection] Unquote services FQCN in autowiring examples (chalasr)
* `#6530 `_ [DependencyInjection] Unquote services FQCN in parent-services examples (chalasr)
* `#6517 `_ Add a warning about using same user for cli and web server (pasdeloup)
* `#6504 `_ Improved the docs for the DependencyInjection component (javiereguiluz)
@@ -233,6 +264,8 @@ New Documentation
* `#6470 `_ Documented the config options of TwigBundle (javiereguiluz)
* `#6427 `_ [Testing] Explain how to add or remove data in a collection of forms (alexislefebvre)
+* `#6465 `_ Added ldap to the list of user providers (AAstakhov)
+* `#6450 `_ [Form] added prototype_data option in CollectionType (kgilden, HeahDude)
* `#6394 `_ Updated Heroku instructions (magnusnordlander)
Fixed Documentation
@@ -255,11 +288,14 @@ Minor Documentation Changes
* `#6472 `_ Avoid confusion (gerryvdm)
* `#6300 `_ Document constraint validator alias optional (Triiistan)
* `#6513 `_ remove documentation of not supported "verbose" option value (TobiasXy)
+* `#6507 `_ fix typo (tyx)
+* `#6509 `_ Update http_kernel_httpkernel_class.rst (AchillesKal)
* `#6510 `_ use port 587 in Amazon SES example (snoek09)
* `#6464 `_ Added possible values for access_decision_manager.strategy (AAstakhov)
* `#6478 `_ Replace reference to the request service (gerryvdm)
* `#6479 `_ Update php.rst (carlos-granados)
* `#6481 `_ Remove reference to Symfony2 in request-flow.png (Daniel Cotton)
+* `#6471 `_ fix broken merge (xabbuh)
* `#6449 `_ [Form] fixed ChoiceType example in CollectionType (HeahDude)
* `#6445 `_ updated the core team (fabpot)
* `#6423 `_ Added a caution note about REMOTE_USER and user impersonation (javiereguiluz)
@@ -268,6 +304,7 @@ Minor Documentation Changes
* `#6456 `_ Fixed array [] notation and trailing spaces (iltar)
* `#6420 `_ Added tip for optional second parameter for form submissions. (Michael Phillips)
* `#6418 `_ fix spelling of the flashBag() method (xabbuh)
+* `#6432 `_ fixed yaml config error (RickieL)
March, 2016
@@ -276,6 +313,7 @@ March, 2016
New Documentation
~~~~~~~~~~~~~~~~~
+* `#6274 `_ Update Doctrine UTF8 docs (mcfedr)
* `#6282 `_ [Form] fix ``choice_label`` values (HeahDude)
* `#5894 `_ [WIP] Added an article to explain how to upgrade third-party bundles to Symfony 3 (javiereguiluz)
* `#6273 `_ [PHPUnit bridge] Add documentation for the component (theofidry)
@@ -284,20 +322,28 @@ New Documentation
Fixed Documentation
~~~~~~~~~~~~~~~~~~~
+* `#6377 `_ Update "bootstrap.php.cache" to "autoload.php" (guilliamxavier)
+* `#6368 `_ [cookbook] Made list of form types more consistent (AAstakhov)
* `#6366 `_ Removed server:stop code block for 2.3 (theyoux)
* `#6347 `_ Add a note about enabling DebugBundle to use VarDumper inside Symfony (martijn80, javiereguiluz)
* `#6320 `_ Fixed typo in path (timhovius)
* `#6334 `_ Fixed yaml configuration of app.exception_controller (AAstakhov)
+* `#6322 `_ [DependencyInjection] fix autowiring docs (eXtreme)
* `#6315 `_ Remove third parameter from createFormBuilder call (Hocdoc)
+* `#6324 `_ Fixed UserCheckerInterface importing (VIs-a-vis)
+* `#6326 `_ Missing svn:ignore (f-plante)
Minor Documentation Changes
~~~~~~~~~~~~~~~~~~~~~~~~~~~
* `#6404 `_ fixed a typo (RickieL)
+* `#6409 `_ Update 'date' to DateType::class in form.rst (iltar)
* `#6411 `_ Fixed a typo in configuration-block (VarunAgw)
* `#6414 `_ stick to Sphinx 1.3.x for the moment (xabbuh)
* `#6399 `_ Fixed wrong code examples for Isbn constraint (AAstakhov)
* `#6397 `_ Fix typo in SwitchUserListener file name (luxifer)
+* `#6390 `_ Reworded the example about $deep param (Oliboy50, javiereguiluz)
+* `#6381 `_ [Form] [Cookbook] Correctly setup unit tests with dependencies (corphi)
* `#6382 `_ unused use instructions (bshevchenko)
* `#6365 `_ Removed the PR table example (this is now included by GitHub template) (javiereguiluz)
* `#6363 `_ Removed info about reducing visibility for private (AAstakhov)
@@ -315,6 +361,7 @@ Minor Documentation Changes
* `#6345 `_ Remove link-local IPv6 address (snoek09)
* `#6219 `_ Point that route parameters are also Request attributes (sfdumi)
* `#6348 `_ [best practices] mostly typos (Talita Kocjan Zager)
+* `#6350 `_ Fix reference to app folder (kainjow)
* `#6275 `_ [quick tour] mostly typos (Talita Kocjan Zager)
* `#6305 `_ Mention IvoryCKEditorBundle in the Symfony Forms doc (javiereguiluz)
* `#6331 `_ Rename DunglasApiBundle to ApiPlatform (sroze)
@@ -324,8 +371,10 @@ Minor Documentation Changes
* `#6330 `_ [Form] reorder EntityType options (HeahDude)
* `#6337 `_ Fix configuration.rst typo (gong023)
* `#6295 `_ Update tools.rst (andrewtch)
+* `#6323 `_ [DependencyInjection] Add Autowiring keyword (theofidry)
* `#6325 `_ Minor error (ThomasLandauer)
* `#6311 `_ Improved TwigExtension to show default values and optional arguments (javiereguiluz)
+* `#6286 `_ [HttpFoundation] Fix typo for ParameterBag getters - 3.0 (rendler-denis)
* `#6267 `_ [Form] fix 'data_class' option in EntityType (HeahDude)
* `#6281 `_ Change isValid to isSubmitted. (mustafaaloko)
@@ -338,15 +387,21 @@ New Documentation
* `#6172 `_ move assets options from templating to assets section and add base_path documentation (snoek09)
* `#6021 `_ mention routing from the database (dbu)
+* `#6032 `_ [DependencyInjection] Autowiring doc (dunglas)
* `#6233 `_ Document translation_domain for choice fields (merorafael, WouterJ)
* `#5655 `_ Added doc about Homestead's Symfony integration (WouterJ)
+* `#5886 `_ [2.8] Add "How to Use Multiple Guard Authenticators" cookbook documentation (mheki)
* `#6072 `_ Add browserkit component documentation (yamiko, yamiko-ninja, robert Parker, javiereguiluz)
* `#6243 `_ Add missing getBoolean() method (bocharsky-bw)
* `#6231 `_ Use hash_equals instead of StringUtils::equals (WouterJ)
+* `#5530 `_ [Cookbook, Security] Added user_checkers.rst (iltar)
+* `#5920 `_ Document automatic registration of extension compiler passes (WouterJ)
* `#5724 `_ Describe configuration behaviour with multiple mailers (xelan)
* `#6077 `_ fixes #5971 (vincentaubert)
+* `#5483 `_ [FrameworkBundle] Name converter of Serializer (dunglas)
* `#6156 `_ [reference] [form] [options] fix #6153 (HeahDude)
* `#6104 `_ Fix #6103 (zsturgess)
+* `#6058 `_ Update Testing Form Types article for 2.8 refactorings (WouterJ)
* `#5856 `_ Reworded the "How to use Gmail" cookbook article (javiereguiluz)
* `#6230 `_ Add annotation to glossary (rebased) (DerStoffel)
* `#5642 `_ Documented label_format option (WouterJ)
@@ -354,38 +409,49 @@ New Documentation
Fixed Documentation
~~~~~~~~~~~~~~~~~~~
+* `#6292 `_ Fix setting permission for var subdirectories (voda)
* `#5995 `_ Update dev_environment.rst (gonzalovilaseca)
* `#6240 `_ [#6224] some tweaks (xabbuh)
* `#5513 `_ [load_balancer_reverse_proxy ] Always use 127.0.0.1 as a trusted proxy (ruudk)
+* `#6081 `_ [cookbook New project] Fix symfony version and initial add (bigs21)
* `#6124 `_ [cookbook] Add annotations block and fix regex (peterkokot)
Minor Documentation Changes
~~~~~~~~~~~~~~~~~~~~~~~~~~~
* `#6308 `_ fix literal syntax (xabbuh)
+* `#6299 `_ Removed True and False constraints from reference (edefimov)
+* `#6298 `_ Update dependency_injection.rst because it has an error. (joserprieto)
+* `#6263 `_ [Cookbook][Debugging] reflect behavior changes in cache generation (xabbuh)
* `#6251 `_ To use annotations, files must be removed (pbowyer)
* `#6288 `_ Update factories.rst (velikanov)
* `#6278 `_ [HttpFoundation] Fix typo for ParameterBag getters (rendler-denis)
* `#6280 `_ Fix syntax of Company class example (cakper)
* `#6284 `_ [Book] [Routing] Fix third param true to UrlGeneratorInterface::ABSOLUTE_URI (eriwin)
* `#6269 `_ [Cookbook][Bundles]fix yaml syntax (mhor)
+* `#6277 `_ remove dot in front of colon (xabbuh)
* `#6255 `_ [Cookbook][Doctrine] some tweaks to the Doctrine registration article (xabbuh)
* `#6229 `_ Rewrite EventDispatcher introduction (WouterJ)
* `#6260 `_ add missing options `choice_value`, `choice_name` and `choice_attr` to `EntityType` (HeahDude)
* `#6262 `_ [Form] reorder options in choice types references (HeahDude)
* `#6256 `_ Fixed code example (twifty)
+* `#6257 `_ [Components][Form] remove outdated caution (xabbuh)
+* `#6253 `_ [Security] Include guard firewall configuration sample. (calinpristavu)
* `#6250 `_ [Cookbook][Console] remove note about memory spool handling on CLI (xabbuh)
* `#6249 `_ [Cookbook][Serializer] fix wording (xabbuh)
+* `#6242 `_ Removed all 2.x versionadded directives (WouterJ)
* `#6246 `_ removed duplicate lines (seferov)
* `#6222 `_ Updated "Learn more from the Cookbook" section (sfdumi)
* `#6245 `_ [Cookbook][Console] change API doc class name (xabbuh)
* `#6223 `_ Improveme the apache/mod_php configuration example (gnat42)
* `#6234 `_ File System Security Issue in Custom Auth Article (finished) (mattjanssen, WouterJ)
* `#4773 `_ [Cookbook] Make registration_form follow best practices (xelaris)
+* `#6090 `_ Reworded the article about profiler storage (xavierleune, javiereguiluz)
* `#5630 `_ Add a caution about logout when using http-basic authenticated firewall (rmed19)
* `#6215 `_ Added a caution about failing cache warmers (javiereguiluz)
* `#6239 `_ Remove app_dev as build-in server is used (rmed19, WouterJ)
* `#6241 `_ [ExpressionLanguage] Add caution about backslash handling (zerustech, WouterJ)
+* `#6235 `_ #6232 update forms as services section (backbone87)
* `#6236 `_ fix some minor typos (xabbuh)
* `#6237 `_ use literals for external class names (xabbuh)
* `#6206 `_ add separate placeholder examples for birthday, datetime and time type (snoek09)
@@ -394,10 +460,16 @@ Minor Documentation Changes
* `#5958 `_ Update security.rst (mpaquet)
* `#6092 `_ Updated information about testing code coverage. (roga)
* `#6051 `_ Mention HautelookAliceBundle in best practices (theofidry, WouterJ)
+* `#6044 `_ Added note about the hash_equals polyfill (WouterJ)
+* `#6213 `_ Update form_collections.rst (insekticid)
* `#6220 `_ [book] fixes typo about redirect status codes in the controller chapter. (hhamon)
* `#6227 `_ Update testing.rst (dvapelnik)
+* `#6228 `_ removed unnecessary exception from repository (gondo)
* `#6212 `_ Typo in default session save_path (DerekRoth)
* `#6208