0e5ac97ee2
This PR was merged into the 3.1-dev branch.
Discussion
----------
[FrameworkBundle] [DX] Add `Controller::json` method to make it easy to send json
| Q | A
| ------------- | ---
| Bug fix? | no
| New feature? | yes
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets |
| License | MIT
| Doc PR |
Its currently a awkward to use Serializer component to send a `JsonResponse`.
I have tried two approaches
1. use `Serializer::normalize` and `JsonResponse`
1. use `Serializer::serialize` and a plain `Response`, and set the `content-type`
In either cases there is need for a custom `json` function so as not to repeat yourself and there are disadvantages.
1. In the first case you are only partly using `Serializer` and any custom `Encoder` would be skipped
1. In the second you are not making use of `JsonResponse`, particular disadvantage if you want to support JSONP.
This new `json` method uses the serializer component is enabled it is used to generate the json data, and falls back to normal `JsonResponse` when its not.
Commits
-------
|
||
---|---|---|
.. | ||
File | ||
Session | ||
Tests | ||
.gitignore | ||
AcceptHeader.php | ||
AcceptHeaderItem.php | ||
ApacheRequest.php | ||
BinaryFileResponse.php | ||
CHANGELOG.md | ||
composer.json | ||
Cookie.php | ||
ExpressionRequestMatcher.php | ||
FileBag.php | ||
HeaderBag.php | ||
IpUtils.php | ||
JsonResponse.php | ||
LICENSE | ||
ParameterBag.php | ||
phpunit.xml.dist | ||
README.md | ||
RedirectResponse.php | ||
Request.php | ||
RequestMatcher.php | ||
RequestMatcherInterface.php | ||
RequestStack.php | ||
Response.php | ||
ResponseHeaderBag.php | ||
ServerBag.php | ||
StreamedResponse.php |
HttpFoundation Component
HttpFoundation defines an object-oriented layer for the HTTP specification.
It provides an abstraction for requests, responses, uploaded files, cookies, sessions, ...
In this example, we get a Request object from the current PHP global variables:
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
$request = Request::createFromGlobals();
echo $request->getPathInfo();
You can also create a Request directly -- that's interesting for unit testing:
$request = Request::create('/?foo=bar', 'GET');
echo $request->getPathInfo();
And here is how to create and send a Response:
$response = new Response('Not Found', 404, array('Content-Type' => 'text/plain'));
$response->send();
The Request and the Response classes have many other methods that implement the HTTP specification.
Resources
You can run the unit tests with the following command:
$ cd path/to/Symfony/Component/HttpFoundation/
$ composer install
$ phpunit