Разделить обработку функции и ответ без переключателя (в поисках альтернативы) - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть функция, которая обрабатывает запрос, и другая функция, которая возвращает конкретный ответ.Должен быть лучший способ / лучший метод для решения этой проблемы, однако я не уверен.

        $isResponseForm = $this->getIsResponseForm();
        $formResponse = null;

        switch ($this->formId) {
            case 'start':
                $formResponse = $isResponseForm ? $this->start() : $this->_start();
                $this->formId = $this->session->get('checkout_item.registration.has_penalty') ? 'late' : 'start';
                break;
            case 'late':
                $formResponse = $isResponseForm ? $this->late() : $this->_late();
                $this->formId = 'start';
                break;
            case 'search':
                $formResponse = $isResponseForm ? $this->search() : $this->_search();
                $this->formId = $this->session->exists('change.address') ? 'verify' : 'review';
                break;
            case 'verify':
                $formResponse = $isResponseForm ? $this->verify() : $this->_verify();
                $this->formId = 'address';
                break;
            case 'address':
                $formResponse = $isResponseForm ? $this->address() : $this->_address();
                $this->formId = 'review';
                break;
            case 'review':
                $formResponse = $isResponseForm ? $this->review() : $this->_review();
                break;
            case 'confirmation':
                $formResponse = $isResponseForm ? $this->confirmation() : null;
                break;
            default:
                $this->processor->errorLog->add('Invalid FormID: ' . $this->formId);
                $this->form->addError('An unknown error occurred (' . $this->processor->errorLog->getLastId() . ')');
        }

        if (!$isResponseForm) {
            $this->setIsResponseForm(true);
            return $this->processForm(); // restart the switch statement
        }

        return $formResponse;

$isResponseForm устанавливается в true после первой итерации.функции с префиксом подчеркивания _ предназначены для обработки, а функции без обработки ответа.

protected function start(): Form
    {
        $checkoutItem = $this->session->get('checkout_item');

        $options = (new Collection($checkoutItem['options']))->sortBy('value');

        $this->form->setFormId('search');
        $this->form->header(
            'FIGURE LENGTH',
            'FigLengthHeaderSlug'
        );
        $this->form->checkbox(
            'Change my Address',
            'address_change'
        );

        return $this->form;
    }

Пример:

  • Шаг 1: $this->_start();
  • Шаг 2: return $this->start();

У меня они были в той же функции, но это было грязно, и я решил разделить их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...