You are here

public function PageExampleController::arguments in Examples for Developers 8

Same name and namespace in other branches
  1. 3.x modules/page_example/src/Controller/PageExampleController.php \Drupal\page_example\Controller\PageExampleController::arguments()

A more complex _controller callback that takes arguments.

This callback is mapped to the path 'examples/page-example/arguments/{first}/{second}'.

The arguments in brackets are passed to this callback from the page URL. The placeholder names "first" and "second" can have any value but should match the callback method variable names; i.e. $first and $second.

This function also demonstrates a more complex render array in the returned values. Instead of rendering the HTML with theme('item_list'), content is left un-rendered, and the theme function name is set using #theme. This content will now be rendered as late as possible, giving more parts of the system a chance to change it if necessary.

Consult Render Arrays documentation for details.

Parameters

string $first: A string to use, should be a number.

string $second: Another string to use, should be a number.

Throws

\Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException If the parameters are invalid.

1 string reference to 'PageExampleController::arguments'
page_example.routing.yml in page_example/page_example.routing.yml
page_example/page_example.routing.yml

File

page_example/src/Controller/PageExampleController.php, line 66

Class

PageExampleController
Controller routines for page example routes.

Namespace

Drupal\page_example\Controller

Code

public function arguments($first, $second) {

  // Make sure you don't trust the URL to be safe! Always check for exploits.
  if (!is_numeric($first) || !is_numeric($second)) {

    // We will just show a standard "access denied" page in this case.
    throw new AccessDeniedHttpException();
  }
  $list[] = $this
    ->t("First number was @number.", [
    '@number' => $first,
  ]);
  $list[] = $this
    ->t("Second number was @number.", [
    '@number' => $second,
  ]);
  $list[] = $this
    ->t('The total was @number.', [
    '@number' => $first + $second,
  ]);
  $render_array['page_example_arguments'] = [
    // The theme function to apply to the #items.
    '#theme' => 'item_list',
    // The list itself.
    '#items' => $list,
    '#title' => $this
      ->t('Argument Information'),
  ];
  return $render_array;
}