Request superglobals in controllers should be replaced with `ServerRequest` object
#17,769 opened on Oct 11, 2022
Repository metrics
- Stars
- (6,886 stars)
- PR merge metrics
- (Avg merge 2d 17h) (11 merged PRs in 30d)
Description
Instead of getting the request parameters from superglobals ($_POST, $_GET and $_REQUEST) in controllers, they should be got from the PhpMyAdmin\Http\ServerRequest object that is available for all controllers.
Controllers have a method called __invoke that has a signature like the following:
public function __invoke(ServerRequest $request): void
So if the controller gets a parameter from the $_POST superglobal, it can be replaced to get from the $request variable. For example:
- $param = $_POST['param'] ?? null;
+ $param = $request->getParsedBodyParam('param');
- $value = $_POST['value'] ?? 'default';
+ $value = $request->getParsedBodyParam('value', 'default');
Or from the $_GET superglobal:
- $param = $_GET['param'] ?? null;
+ $param = $request->getQueryParam('param');
- $value = $_GET['value'] ?? 'default';
+ $value = $request->getQueryParam('value', 'default');
If you want to get from $_POST or from $_GET:
- $param = $_POST['param'] ?? $_GET['param'] ?? null;
+ $param = $request->getParam('param');
- $value = $_POST['param'] ?? $_GET['value'] ?? 'default';
+ $value = $request->getParam('value', 'default');
You can also get all the request parameters. For example:
- $getParams = $_GET;
+ $getParams = $this->getQueryParams();
- $postParams = $_POST;
+ $postParams = $this->getParsedBody();
Note Please be careful that while the
$_POSTand$_GETare global variables, theServerRequestis a immutable object. So, if you encounter something like this in code:$_POST['param'] = 'new value';You should first find all places in the code that uses this parameter and refactor the code to not write on the global variable.