Drupal 8's routes may include placeholder elements which designate places where the URL contains dynamic values. In the controller method, this value is available when a variable with the same name is used in the controller method.
For example in mymodule.routing.yml:
mymodule.route_name:
path: '/mymodule/{name}'
defaults:
_controller: '\Drupal\mymodule\Controller\MyModuleController::content'
requirements:
_permission: 'access content'
The {name} element in the URL is called a slug and is available as a $name in the content method.
Example:
namespace Drupal\mymodule\Controller;
use Drupal\Core\Controller\ControllerBase;
/**
* Class MyModuleController
* @package Drupal\mymodule\Controller
*/
class MyModuleController extends ControllerBase
{
/**
* @param $name
* @return array
*/
public function content($name)
{
return [
'#type' => 'markup',
'#markup' => $this->t('Hello @name .', array('@name' => $name)),
];
}
}