public function add($step, $callback)
    {
        //Check if step is allowed

        (new \Phramework\Validate\EnumValidator([
            self::STEP_BEFORE_AUTHENTICATION_CHECK,
            self::STEP_AFTER_AUTHENTICATION_CHECK,
            self::STEP_AFTER_CALL_URISTRATEGY,
            self::STEP_BEFORE_CALL_URISTRATEGY,
            self::STEP_BEFORE_CLOSE,
            self::STEP_FINALLY,
            self::STEP_ERROR
        ]))->parse($step);

        if (!is_callable($callback)) {
            throw new \Exception(
                Phramework::getTranslated('Callback is not callable')
            );
        }

        //If stepCallback list is empty
        if (!isset($this->stepCallback[$step])) {
            //Initialize list
            $this->stepCallback[$step] = [];
        }

        //Push
        $this->stepCallback[$step][] = $callback;
    }