public function prefix($name, $params = [], callable $callback = null)
    {
        if ($callback === null) {
            if (!is_callable($params)) {
                throw new InvalidArgumentException('A valid callback is expected');
            }
            $callback = $params;
            $params = [];
        }
        $name = Inflector::underscore($name);
        $path = '/' . $name;
        if (isset($params['path'])) {
            $path = $params['path'];
            unset($params['path']);
        }
        if (isset($this->_params['prefix'])) {
            $name = $this->_params['prefix'] . '/' . $name;
        }
        $params = array_merge($params, ['prefix' => $name]);
        $this->scope($path, $params, $callback);
    }