@@ -155,6 +155,7 @@ Some options are described in this guide:
155
155
* `Redirects `_
156
156
* `Retry Failed Requests `_
157
157
* `HTTP Proxies `_
158
+ * `Using URI Templates `_
158
159
159
160
Check out the full :ref: `http_client config reference <reference-http-client >`
160
161
to learn about all the options.
@@ -822,6 +823,83 @@ in your requests::
822
823
823
824
This setting won’t affect other clients.
824
825
826
+ Using URI Templates
827
+ ~~~~~~~~~~~~~~~~~~~
828
+
829
+ The :class: `Symfony\\ Component\\ HttpClient\\ UriTemplateHttpClient ` provides
830
+ a client that eases the use of URI templates, as described in the `RFC 6570 `_.
831
+ Here is an example of how to use this client with URI templates::
832
+
833
+ $client = new UriTemplateHttpClient();
834
+
835
+ // This request will result on querying http://example.org/users?page=1
836
+ $client->request('GET', 'http://example.org/{resource}{?page}', [
837
+ 'vars' => [
838
+ 'resource' => 'users',
839
+ 'page' => 1,
840
+ ],
841
+ ]);
842
+
843
+ When using this client in the Framework context, all existing HTTP clients
844
+ are decorated by the :class: `Symfony\\ Component\\ HttpClient\\ UriTemplateHttpClient `.
845
+ This means that URI template feature is enabled by default for all HTTP clients
846
+ you may use in your application.
847
+
848
+ You can configure variables that will be replaced globally in all URI templates
849
+ of your application:
850
+
851
+ .. configuration-block ::
852
+
853
+ .. code-block :: yaml
854
+
855
+ # config/packages/framework.yaml
856
+ framework :
857
+ http_client :
858
+ default_options :
859
+ vars :
860
+ - secret : ' secret-token'
861
+
862
+ .. code-block :: xml
863
+
864
+ <!-- config/packages/framework.xml -->
865
+ <?xml version =" 1.0" encoding =" UTF-8" ?>
866
+ <container xmlns =" http://symfony.com/schema/dic/services"
867
+ xmlns : xsi =" http://www.w3.org/2001/XMLSchema-instance"
868
+ xmlns : framework =" http://symfony.com/schema/dic/symfony"
869
+ xsi : schemaLocation =" http://symfony.com/schema/dic/services
870
+ https://symfony.com/schema/dic/services/services-1.0.xsd
871
+ http://symfony.com/schema/dic/symfony https://symfony.com/schema/dic/symfony/symfony-1.0.xsd" >
872
+
873
+ <framework : config >
874
+ <framework : http-client >
875
+ <framework : default-options >
876
+ <framework : vars name =" secret" >secret-token</framework : vars >
877
+ </framework : default-options >
878
+ </framework : http-client >
879
+ </framework : config >
880
+ </container >
881
+
882
+ .. code-block :: php
883
+
884
+ // config/packages/framework.php
885
+ use Symfony\Config\FrameworkConfig;
886
+
887
+ return static function (FrameworkConfig $framework) {
888
+ $framework->httpClient()
889
+ ->defaultOptions()
890
+ ->vars(['secret' => 'secret-token'])
891
+ ;
892
+ };
893
+
894
+ If you want to define your own logic to handle variables of URI templates, you
895
+ can do so by redefining the ``http_client.uri_template_expander `` alias. Your
896
+ service must be invokable.
897
+
898
+ .. versionadded :: 6.3
899
+
900
+ The :class: `Symfony\\ Component\\ HttpClient\\ UriTemplateHttpClient ` was
901
+ introduced in Symfony 6.3.
902
+
825
903
Performance
826
904
-----------
827
905
@@ -2055,3 +2133,4 @@ you to do so, by yielding the exception from its body::
2055
2133
.. _`EventSource` : https://www.w3.org/TR/eventsource/#eventsource
2056
2134
.. _`idempotent method` : https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Idempotent_methods
2057
2135
.. _`SSRF` : https://portswigger.net/web-security/ssrf
2136
+ .. _`RFC 6570` : https://www.rfc-editor.org/rfc/rfc6570
0 commit comments