Convenience function for generating a form from a view in a standard location.This function assumes that the body of the form is located at "forms/$action" and sets the action by default to "action/$action". Automatically wraps the forms/$action view with a <form> tag and inserts the anti-csrf security tokens.
@tip This automatically appends elgg-form-action-name to the form's class. It replaces any slashes with dashes (blog/save becomes elgg-form-blog-save)
This would assume a "login" form body to be at "forms/login" and would set the action of the form to "http://yoursite.com/action/login".
If elgg_view('forms/login') is: <input type="text" name="username" > <input type="password" name="password" >
Then elgg_view_form('login') generates: <form action="http://yoursite.com/action/login" method="post"> ...security tokens... <input type="text" name="username" > <input type="password" name="password" > </form>
<?php
use
Elgg\Traits\Loggable;
class FormsService {
protected bool $rendering = false;
public function __construct(
protected ViewsService
$views,
protected EventsService $events,
protected ESMService $esm,
) {
}
'method' => 'post',
'ajax' => false,
'sticky_enabled' => false,
'sticky_ignored_fields' => [],
];
'elgg-form-' . preg_replace(
'/[^a-z0-9]/i',
'-',
$action)],
);
}
$this->esm->import('input/form-ajax');
}
$this->rendering = true;
$this->footer = '';
$body = $this->views->renderView(
'elements/forms/body', [
]);
$body .= $this->views->renderView(
'elements/forms/footer', [
'footer' => $this->getFooter(),
]);
}
$this->rendering = false;
}
}
throw new InvalidArgumentException("The provided entity doesn't match the given entity type/subtype");
}
$fields = (array) $this->events->triggerResults(
'form:register:fields',
"{$entity_type}:{$entity_subtype}", [
$default_form_vars = [
'sticky_enabled' => true,
];
$default_body_vars = [
];
}
$forms = [
"{$entity_type}/{$entity_subtype}/edit",
"{$entity_subtype}/edit",
];
foreach ($forms as
$view) {
}
}
return 'entity/edit';
}
"{$entity_type}/{$entity_subtype}/edit",
"{$entity_subtype}/edit",
];
}
}
throw new DomainException("No form action found for {$entity_type}/{$entity_subtype}");
}
public function setFooter(
string $footer =
''): void {
throw new LogicException('Form footer can only be set and retrieved during form rendering, anywhere in elgg_view_form() call stack (e.g. form view, extending views, or view events)');
}
}
public function getFooter(): string {
throw new LogicException('Form footer can only be set and retrieved during form rendering, anywhere in elgg_view_form() call stack (e.g. form view, extending views, or view events)');
}
}
}
trait Loggable
Enables adding a logger.
$fields
Save the configuration of the security.txt contents.
if(!empty($avatar) &&! $avatar->isValid()) elseif(empty($avatar)) if(! $owner->saveIconFromUploadedFile('avatar')) if(!elgg_trigger_event('profileiconupdate', $owner->type, $owner)) $view
if(!elgg_view_exists("plugins/{$plugin_id}/settings")) $form_vars
foreach($categories as $key=> $category) $body
Exception thrown if a value does not adhere to a defined valid data domain.
Exception thrown if an argument is not of the expected type.
Exception that represents error in the program logic.
Keeps track of ES modules.
elgg_extract_class(array $array, array|string $existing=[], string $extract_key='class')
Extract class names from an array, optionally merging into a preexisting set.
elgg_extract($key, $array, $default=null, bool $strict=true)
Checks for $array[$key] and returns its value if it exists, else returns $default.
elgg_action_exists(string $action)
Check if an action is registered and its script exists.
elgg_view_exists(string $view, string $viewtype='', bool $recurse=true)
Returns whether the specified view exists.
elgg_view(string $view, array $vars=[], string $viewtype='')
Return a parsed view.
elgg_generate_action_url(string $action, array $query=[], bool $add_csrf_tokens=true)
Generate an action URL.
if(parse_url(elgg_get_site_url(), PHP_URL_PATH) !=='/') if(file_exists(elgg_get_root_path() . 'robots.txt'))
Set robots.txt.
if(! $menu instanceof \Elgg\Menu\PreparedMenu) $actions