public function ApiMarkup::getFormMarkup in FormAssembly 8
Retrieve the HTML for a FormAssembly form.
The FA API recognizes query parameters passed on the rest URL and will use them to pre-fill fields in the returned form markup. Here we fold in parameters configured via formassembly_form() and expose the hook hook_formassembly_form_params_alter(&$params) to allow modules to modify the passed parameter list.
Parameters
\Drupal\formassembly\Entity\FormAssemblyEntity $entity: Entity form object.
Return value
string HTML representation of the form.
File
- src/
ApiMarkup.php, line 127
Class
- ApiMarkup
- Service class for FormAssembly API: Fetches form markup.
Namespace
Drupal\formassemblyCode
public function getFormMarkup(FormAssemblyEntity $entity) {
$params = [];
if (!$entity->query_params
->isEmpty()) {
$params = $entity->query_params->value;
}
// Expose hook_formassembly_form_params_alter()
$this->moduleHandler
->alter('formassembly_form_params', $params);
// Replace any tokens found in the parameter pair values.
$data = [
'user' => $this->userProxy
->getAccount(),
];
foreach ($this->routeMatch
->getParameters() as $parameter) {
if ($parameter instanceof ContentEntityInterface) {
$data[$parameter
->getEntityTypeId()] = $parameter;
}
}
foreach ($params as $key => $value) {
$params[$key] = $this->tokens
->replace($value, $data, [
'clear' => TRUE,
]);
}
$params = array_filter($params, function ($value) {
return !is_null($value) && $value !== '';
});
// Make FA rest call and return form markup.
$url = $this
->getUrl('/rest/forms/view/' . $entity->faid->value);
$url
->setOptions([
'query' => $params,
]);
$request = $this->httpClient
->get($url
->toString(TRUE)
->getGeneratedUrl());
// Guzzle throws an Exception on http 400/500 errors.
// Ensure we have a 200.
if ($request
->getStatusCode() != 200) {
throw new \UnexpectedValueException('Http return code 200 expected. Code ' . $request
->getStatusCode() . ' received.');
}
return $request
->getBody()
->getContents();
}