@@ -17,39 +17,78 @@ Creating Routes
17
17
18
18
Routes can be configured in YAML, XML, PHP or using annotations. All formats
19
19
provide the same features and performance, so choose your favorite.
20
- :doc: `Symfony recommends annotations </best_practices/controllers >`
21
- because it's convenient to put the route and controller in the
22
- same place instead of dealing with multiple files.
20
+ :doc: `Symfony recommends annotations </best_practices/controllers >` because it's
21
+ convenient to put the route and controller in the same place.
23
22
24
- If you choose annotations, run this command once in your application to add
25
- support for them:
23
+ Creating Routes as Annotations
24
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
25
+
26
+ Run this command once in your application to add support for annotations:
26
27
27
28
.. code-block :: terminal
28
29
29
30
$ composer require annotations
30
31
31
- Suppose you want to define a route for the ``/blog `` URL in your application:
32
+ In addition to installing the needed dependencies, this command creates the
33
+ following configuration file:
32
34
33
- .. configuration -block ::
35
+ .. code -block :: yaml
34
36
35
- .. code-block :: php-annotations
37
+ # config/routes.yaml
38
+ controllers :
39
+ resource : ' ../src/Controller/'
40
+ type : annotation
36
41
37
- // src/Controller/BlogController.php
38
- namespace App\ Controller;
42
+ This configuration tells Symfony to looks for routes defined as annotations in
43
+ any PHP class stored in the `` src/ Controller/ `` directory.
39
44
40
- use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
41
- use Symfony\Component\Routing\Annotation\Route;
45
+ Suppose you want to define a route for the `` /blog `` URL in your application. To
46
+ do so, create a :doc: ` controller class < /controller >` like the following::
42
47
43
- class BlogController extends AbstractController
48
+ // src/Controller/BlogController.php
49
+ namespace App\Controller;
50
+
51
+ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
52
+ use Symfony\Component\Routing\Annotation\Route;
53
+
54
+ class BlogController extends AbstractController
55
+ {
56
+ /**
57
+ * @Route("/blog", name="blog_list")
58
+ */
59
+ public function list()
44
60
{
45
- /**
46
- * @Route("/blog", name="blog_list")
47
- */
48
- public function list()
49
- {
50
- // ...
51
- }
61
+ // ...
52
62
}
63
+ }
64
+
65
+ This configuration defines a route called ``blog_list `` that matches when the
66
+ user requests the ``/blog `` URL. When the match occurs, the application runs
67
+ the ``list() `` method of the ``BlogController `` class.
68
+
69
+ .. note ::
70
+
71
+ The query string of a URL is not considered when matching routes. In this
72
+ example, URLs like ``/blog?foo=bar `` and ``/blog?foo=bar&bar=foo `` will
73
+ also match the ``blog_list `` route.
74
+
75
+ The route name (``blog_list ``) is not important for now, but it will be
76
+ essential later when :ref: `generating URLs <routing-generating-urls >`. You only
77
+ have to keep in mind that each route name must be unique in the application.
78
+
79
+ Creating Routes in YAML, XML or PHP Files
80
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
81
+
82
+ Instead of defining routes in the controller classes, you can define them in a
83
+ separate YAML, XML or PHP file. The main advantage is that they don't require
84
+ any extra dependency. The main drawback is that you have to work with multiple
85
+ files when checking the routing of some controller action.
86
+
87
+ The following example shows how to define in YAML/XML/PHP a route called
88
+ ``blog_list `` that associates the ``/blog `` URL with the ``list() `` action of
89
+ the ``BlogController ``:
90
+
91
+ .. configuration-block ::
53
92
54
93
.. code-block :: yaml
55
94
@@ -98,20 +137,6 @@ Suppose you want to define a route for the ``/blog`` URL in your application:
98
137
;
99
138
};
100
139
101
- This configuration defines a route called ``blog_list `` that matches when the
102
- user requests the ``/blog `` URL. When the match occurs, the application runs
103
- the ``list() `` method of the ``BlogController `` class.
104
-
105
- .. note ::
106
-
107
- The query string of a URL is not considered when matching routes. In this
108
- example, URLs like ``/blog?foo=bar `` and ``/blog?foo=bar&bar=foo `` will
109
- also match the ``blog_list `` route.
110
-
111
- The route name (``blog_list ``) is not important for now, but it will be essential later when
112
- :ref: `generating URLs <routing-generating-urls >`. You only have to keep in mind
113
- that each route name must be unique in the application.
114
-
115
140
.. _routing-matching-http-methods :
116
141
117
142
Matching HTTP Methods
0 commit comments