Skip to content

Commit 17d1c39

Browse files
committed
Merge branch '3.4'
* 3.4: (23 commits) [#7907] add some use statements Updating Doctrine syntax for getRepository method Reworded the tip about property_info and Symfony framework remove useless space Add information for enable property_info service Updating doctrine class use Fixed the parse() method in the ExpressionLanguage AST examples [#7909] fix some typos Explained the locateResource() method of HttpKernel Reworded the note about dump() not being available in prod Symfony Installer Instructions for Windows Updated the screenshot of exceptions in dev environment Typo Fixing a typo in the Final Thoughts section Stop recommending the use of "doctrine:generate:entities" Use "null" so the lock is named automatically Added a help note about translating routes Use a safer code sample for Twig best practices Use the Twig namespaced syntax for all templates Updated the screenshot of deprecation messages ...
2 parents 10923ef + 84ddb53 commit 17d1c39

37 files changed

+196
-191
lines changed
Loading
14.2 KB
Loading

best_practices/controllers.rst

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ for the homepage of our app:
9595
9696
namespace AppBundle\Controller;
9797
98+
use AppBundle\Entity\Post;
9899
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
99100
use Symfony\Component\Routing\Annotation\Route;
100101
@@ -106,7 +107,7 @@ for the homepage of our app:
106107
public function indexAction()
107108
{
108109
$posts = $this->getDoctrine()
109-
->getRepository('AppBundle:Post')
110+
->getRepository(Post::class)
110111
->findLatest();
111112
112113
return $this->render('default/index.html.twig', array(
@@ -186,7 +187,7 @@ manually. In our application, we have this situation in ``CommentController``:
186187
public function newAction(Request $request, $postSlug)
187188
{
188189
$post = $this->getDoctrine()
189-
->getRepository('AppBundle:Post')
190+
->getRepository(Post::class)
190191
->findOneBy(array('slug' => $postSlug));
191192
192193
if (!$post) {

best_practices/security.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ more advanced use-case, you can always do the same security check in PHP:
228228
public function editAction($id)
229229
{
230230
$post = $this->getDoctrine()
231-
->getRepository('AppBundle:Post')
231+
->getRepository(Post::class)
232232
->find($id);
233233
234234
if (!$post) {

best_practices/templates.rst

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -30,22 +30,20 @@ Template Locations
3030
Store all your application's templates in ``app/Resources/views/`` directory.
3131

3232
Traditionally, Symfony developers stored the application templates in the
33-
``Resources/views/`` directory of each bundle. Then they used the logical name
34-
to refer to them (e.g. ``AcmeDemoBundle:Default:index.html.twig``).
33+
``Resources/views/`` directory of each bundle. Then they used the Twig namespaced
34+
path to refer to them (e.g. ``@AcmeDemo/Default/index.html.twig``).
3535

3636
But for the templates used in your application, it's much more convenient
3737
to store them in the ``app/Resources/views/`` directory. For starters, this
3838
drastically simplifies their logical names:
3939

40-
================================================= ==================================
41-
Templates Stored inside Bundles Templates Stored in ``app/``
42-
================================================= ==================================
43-
``AcmeDemoBundle:Default:index.html.twig`` ``default/index.html.twig``
44-
``::layout.html.twig`` ``layout.html.twig``
45-
``AcmeDemoBundle::index.html.twig`` ``index.html.twig``
46-
``AcmeDemoBundle:Default:subdir/index.html.twig`` ``default/subdir/index.html.twig``
47-
``AcmeDemoBundle:Default/subdir:index.html.twig`` ``default/subdir/index.html.twig``
48-
================================================= ==================================
40+
============================================ ==================================
41+
Templates Stored inside Bundles Templates Stored in ``app/``
42+
============================================ ==================================
43+
``@AcmeDemo/index.html.twig`` ``index.html.twig``
44+
``@AcmeDemo/Default/index.html.twig`` ``default/index.html.twig``
45+
``@AcmeDemo/Default/subdir/index.html.twig`` ``default/subdir/index.html.twig``
46+
============================================ ==================================
4947

5048
Another advantage is that centralizing your templates simplifies the work
5149
of your designers. They don't need to look for templates in lots of directories
@@ -121,7 +119,7 @@ class in the constructor of the Twig extension:
121119
new \Twig_SimpleFilter(
122120
'md2html',
123121
array($this, 'markdownToHtml'),
124-
array('is_safe' => array('html'))
122+
array('is_safe' => array('html'), 'pre_escape' => 'html')
125123
),
126124
);
127125
}

bundles/best_practices.rst

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -429,6 +429,21 @@ The ``composer.json`` file should include at least the following metadata:
429429
In order to make it easier for developers to find your bundle, register it on
430430
`Packagist`_, the official repository for Composer packages.
431431

432+
Resources
433+
---------
434+
435+
If the bundle references any resources (config files, translation files, etc.),
436+
don't use physical paths (e.g. ``__DIR__/config/services.xml``) but logical
437+
paths (e.g. ``@AppBundle/Resources/config/services.xml``).
438+
439+
The logical paths are required because of the bundle overriding mechanism that
440+
lets you override any resource/file of any bundle. See :ref:`http-kernel-resource-locator`
441+
for more details about transforming physical paths into logical paths.
442+
443+
Beware that templates use a simplified version of the logical path shown above.
444+
For example, an ``index.html.twig`` template located in the ``Resources/views/Default/``
445+
directory of the AppBundle, is referenced as ``@App/Default/index.html.twig``.
446+
432447
Learn more
433448
----------
434449

bundles/override.rst

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,14 @@ How to Override any Part of a Bundle
77
This document is a quick reference for how to override different parts of
88
third-party bundles.
99

10+
.. tip::
11+
12+
The bundle overriding mechanism means that you cannot use physical paths to
13+
refer to bundle's resources (e.g. ``__DIR__/config/services.xml``). Always
14+
use logical paths in your bundles (e.g. ``@AppBundle/Resources/config/services.xml``)
15+
and call the :ref:`locateResource() method <http-kernel-resource-locator>`
16+
to turn them into physical paths when needed.
17+
1018
Templates
1119
---------
1220

components/expression_language/ast.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ method after parsing any expression to get its AST::
2121
use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
2222

2323
$ast = (new ExpressionLanguage())
24-
->parse('1 + 2')
24+
->parse('1 + 2', array())
2525
->getNodes()
2626
;
2727

@@ -41,7 +41,7 @@ method to turn the AST into an array::
4141
// ...
4242

4343
$astAsArray = (new ExpressionLanguage())
44-
->parse('1 + 2')
44+
->parse('1 + 2', array())
4545
->getNodes()
4646
->toArray()
4747
;

components/form.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -418,7 +418,7 @@ is created from the form factory.
418418
->add('dueDate', DateType::class)
419419
->getForm();
420420
421-
return $this->render('AcmeTaskBundle:Default:new.html.twig', array(
421+
return $this->render('@AcmeTask/Default/new.html.twig', array(
422422
'form' => $form->createView(),
423423
));
424424
}

components/http_kernel.rst

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -742,6 +742,32 @@ look like this::
742742
// ...
743743
}
744744

745+
.. _http-kernel-resource-locator:
746+
747+
Locating Resources
748+
------------------
749+
750+
The HttpKernel component is responsible of the bundle mechanism used in Symfony
751+
applications. The key feature of the bundles is that they allow to override any
752+
resource used by the application (config files, templates, controllers,
753+
translation files, etc.)
754+
755+
This overriding mechanism works because resources are referenced not by their
756+
physical path but by their logical path. For example, the ``services.xml`` file
757+
stored in the ``Resources/config/`` directory of a bundle called AppBundle is
758+
referenced as ``@AppBundle/Resources/config/services.xml``. This logical path
759+
will work when the application overrides that file and even if you change the
760+
directory of AppBundle.
761+
762+
The HttpKernel component provides a method called :method:`Symfony\\Component\\HttpKernel\\Kernel::locateResource`
763+
which can be used to transform logical paths into physical paths::
764+
765+
use Symfony\Component\HttpKernel\HttpKernel;
766+
767+
// ...
768+
$kernel = new HttpKernel($dispatcher, $resolver);
769+
$path = $kernel->locateResource('@AppBundle/Resources/config/services.xml');
770+
745771
Learn more
746772
----------
747773

0 commit comments

Comments
 (0)