71 $this->hooks = $hooks;
72 $this->routes = $routes;
73 $this->matcher = $matcher;
74 $this->handlers = $handlers;
75 $this->response = $response;
92 $this->timer->begin([
'build page']);
97 $response = $this->getResponse($request);
99 if ($this->response->getSentResponse()) {
103 $this->response->respond($response);
105 return headers_sent();
118 $response = $this->prepareLegacyResponse($request);
121 $response = $this->prepareResponse($request);
124 if (!$response instanceof ResponseBuilder) {
128 if ($request->getFirstUrlSegment() ==
'action') {
129 if ($response->getForwardURL() === null) {
147 $segments = $request->getUrlSegments();
148 if (!empty($segments)) {
149 $identifier = array_shift($segments);
156 'identifier' => $identifier,
157 'handler' => $identifier,
158 'segments' => $segments,
161 if (!$this->hooks->hasHandler(
'route', $identifier) && !$this->hooks->hasHandler(
'route',
'all')) {
170 $result = $this->hooks->trigger(
'route', $identifier, $old, $old);
176 }
else if (
$result ===
false) {
179 elgg_log(
"'route' hook should not be used to rewrite routing path. Use 'route:rewrite' hook instead",
'ERROR');
181 if ($identifier !=
$result[
'identifier']) {
182 $identifier =
$result[
'identifier'];
183 }
else if ($identifier !=
$result[
'handler']) {
184 $identifier =
$result[
'handler'];
189 array_unshift($segments, $identifier);
212 $segments = $request->getUrlSegments();
213 $path =
'/' . implode(
'/', $segments);
216 $parameters = $this->matcher->match(
$path);
219 unset($parameters[
'_resource']);
222 unset($parameters[
'_handler']);
225 unset($parameters[
'_controller']);
228 unset($parameters[
'_file']);
230 $middleware =
elgg_extract(
'_middleware', $parameters, []);
231 unset($parameters[
'_middleware']);
233 $route = $this->routes->get($parameters[
'_route']);
234 $route->setMatchedParameters($parameters);
235 $request->setRoute($route);
237 $envelope = new \Elgg\Request(
elgg(), $request);
238 $parameters[
'request'] = $envelope;
240 foreach ($middleware as $callable) {
241 $result = $this->handlers->call($callable, $envelope, null);
248 return $this->getResponseFromHandler(
$handler, $envelope);
249 }
else if ($controller) {
250 $result = $this->handlers->call($controller, $envelope, null);
255 return $this->getResponseFromFile(
$file, $envelope);
260 }
catch (ResourceNotFoundException $ex) {
262 }
catch (MethodNotAllowedException $ex) {
282 $path = trim($request->getPath(),
'/');
283 $segments = explode(
'/',
$path);
284 $identifier = array_shift($segments) ? :
'';
288 $response = call_user_func(
$handler, $segments, $identifier, $request);
298 }
else if ($response ===
false) {
317 $path = $request->getPath();
324 $response = include
$file;
347 $segments = $request->getUrlSegments();
348 if (!empty($segments)) {
349 $identifier = array_shift($segments);
355 'identifier' => $identifier,
356 'segments' => $segments,
358 $new = $this->hooks->trigger(
'route:rewrite', $identifier, $old, $old);
364 !isset($new[
'identifier']) ||
365 !isset($new[
'segments']) ||
366 !is_string($new[
'identifier']) ||
367 !is_array($new[
'segments'])
369 throw new RuntimeException(
'rewrite_path handler returned invalid route data.');
373 $segments = $new[
'segments'];
374 array_unshift($segments, $new[
'identifier']);
376 return $request->setUrlSegments($segments);
HTTP response builder interface.
if(!$entity->delete()) $forward_url
if(!array_key_exists($filename, $text_files)) $file
route(HttpRequest $request)
Routes the request to a registered page handler.
const ELGG_HTTP_NOT_IMPLEMENTED
Helpers for providing callable-based APIs.
elgg_view_resource($name, array $vars=[])
Render a resource view.
prepareResponse(HttpRequest $request)
Prepare response.
elgg_redirect_response($forward_url=REFERRER, $status_code=ELGG_HTTP_FOUND)
Prepare a silent redirect response to be returned by a page or an action handler. ...
Thrown when page is not accessible.
$request
Page handler for autocomplete endpoint.
const ELGG_HTTP_PERMANENTLY_REDIRECT
catch(LoginException $e) if($request->isXhr()) $output
trait Profilable
Make an object accept a timer.
elgg_echo($message_key, array $args=[], $language="")
Given a message key, returns an appropriately translated full-text string.
getResponseFromHandler($handler,\Elgg\Request $request)
Get response from handler function.
getResponseFromFile($file,\Elgg\Request $request)
Get response from file.
elgg_log($message, $level=\Psr\Log\LogLevel::NOTICE)
Log a message.
elgg_deprecated_notice($msg, $dep_version, $backtrace_level=1)
Log a notice about deprecated use of a function, view, etc.
prepareLegacyResponse(HttpRequest $request)
Prepare legacy response by listening to "route" hook.
__construct(PluginHooksService $hooks, RouteCollection $routes, UrlMatcher $matcher, HandlersService $handlers, ResponseFactory $response)
Constructor.
elgg_extract($key, $array, $default=null, $strict=true)
Checks for $array[$key] and returns its value if it exists, else returns $default.
allowRewrite(HttpRequest $request)
Filter a request through the route:rewrite hook.
elgg_ok_response($content= '', $message= '', $forward_url=null, $status_code=ELGG_HTTP_OK)
Prepares a successful response to be returned by a page or an action handler.
Thrown when request is malformatted.
getResponse(HttpRequest $request)
Build a response.