Правильно ли я понимаю суть ООП?

триньк
<?php


namespace app\controllers;


use app\models\InitialTraining;

class InitialTrainingController extends AppController
{
    public function indexAction()
    {
        $this->trainingRedirect(1);
        $this->site->description = 'Начальное обучение: этап 1-й';
        $site = $this->site;
        $user = $this->user;
        $model = new InitialTraining();
        $training = $model->getTraining($this->user->training);
        $this->set(compact('site', 'user', 'training'));
        if (isset($_POST['do'])) {
            $model->step_1_2_5_6_7($this->user->id);
            $this->alertRedirect('success', 'Вы прошли 1-й этап обучения', '/initial-training/step-two');
        }
    }

    public function stepTwoAction()
    {
        $this->trainingRedirect(2);
        $this->site->description = 'Начальное обучение: этап 2-й';
        $site = $this->site;
        $user = $this->user;
        $model = new InitialTraining();
        $training = $model->getTraining($this->user->training);
        $this->set(compact('site', 'user', 'training'));
        if (isset($_POST['do'])) {
            $model->step_1_2_5_6_7($this->user->id);
            $this->alertRedirect('success', 'Вы прошли 2-й этап обучения', '/initial-training/step-three');
        }
    }

    public function stepThreeAction()
    {
        $this->trainingRedirect(3);
        $this->site->description = 'Начальное обучение: этап 3-й';
        $site = $this->site;
        $user = $this->user;
        $model = new InitialTraining();
        $training = $model->getTraining($this->user->training);
        $this->set(compact('site', 'user', 'training'));
        if (isset($_POST['do'])) {
            $model->step_3($this->user->id);
            $this->alertRedirect('success', 'Вы прошли 3-й этап обучения', '/initial-training/step-four');
        }
    }

    public function stepFourAction()
    {
        $this->trainingRedirect(4);
        $this->site->description = 'Начальное обучение: этап 4-й';
        $site = $this->site;
        $user = $this->user;
        $model = new InitialTraining();
        $training = $model->getTraining($this->user->training);
        $data_unit = $model->getUnit($this->user->id);
        $this->set(compact('site', 'user', 'training', 'data_unit'));
        if (isset($_POST['do'])) {
            $model->step_4($this->user->id);
            $this->alertRedirect('success', 'Вы прошли 4-й этап обучения', '/initial-training/step-five');
        }
    }

    public function stepFiveAction()
    {
        $this->trainingRedirect(5);
        $this->site->description = 'Начальное обучение: этап 5-й';
        $site = $this->site;
        $user = $this->user;
        $model = new InitialTraining();
        $training = $model->getTraining($this->user->training);
        $this->set(compact('site', 'user', 'training'));
        if (isset($_POST['do'])) {
            $model->step_1_2_5_6_7($this->user->id);
            $this->alertRedirect('success', 'Вы прошли 5-й этап обучения', '/initial-training/step-six');
        }
    }

    public function stepSixAction()
    {
        $this->trainingRedirect(6);
        $this->site->description = 'Начальное обучение: этап 6-й';
        $site = $this->site;
        $user = $this->user;
        $model = new InitialTraining();
        $training = $model->getTraining($this->user->training);
        $this->set(compact('site', 'user', 'training'));
        if (isset($_POST['do'])) {
            $model->step_1_2_5_6_7($this->user->id);
            $this->alertRedirect('success', 'Вы прошли 6-й этап обучения', '/initial-training/step-seven');
        }
    }

    public function stepSevenAction()
    {
        $this->trainingRedirect(7);
        $this->site->description = 'Начальное обучение: этап 7-й';
        $site = $this->site;
        $user = $this->user;
        $model = new InitialTraining();
        $training = $model->getTraining($this->user->training);
        $this->set(compact('site', 'user', 'training'));
        if (isset($_POST['do'])) {
            $model->step_1_2_5_6_7($this->user->id);
            $this->alertRedirect('success', 'Вы прошли 7-й этап обучения', '/initial-training/step-eight');
        }
    }

    public function stepEightAction()
    {
        $this->trainingRedirect(8);
        $this->site->description = 'Начальное обучение: этап 8-й';
        $site = $this->site;
        $user = $this->user;
        $model = new InitialTraining();
        $training = $model->getTraining($this->user->training);
        $data_country = $model->getCountry();
        $this->set(compact('site', 'user', 'training', 'data_country'));
        if (isset($_POST['do'])) {
            if (empty($_POST['country'])) {
                $this->alertRedirect('danger', 'Вы не выбрали страну');
            } elseif (!in_array($_POST['country'], range(1, 7))) {
                $this->alertRedirect('danger', 'Такой страны нет в игре');
            }
            $model->step_8($this->user->id);
            $this->alertRedirect('success', 'Вы прошли 8-й этап обучения', '/initial-training/step-nine');
        }
    }

    public function stepNineAction()
    {
        $this->trainingRedirect(9);
        $this->site->description = 'Начальное обучение: этап 9-й';
        $site = $this->site;
        $user = $this->user;
        $model = new InitialTraining();
        $training = $model->getTraining($this->user->training);
        $data_operation = $model->getOperation($this->user->id);
        $data_mission = $model->getMission($this->user->id);
        $this->set(compact('site', 'user', 'training', 'data_operation', 'data_mission'));
        if (isset($_POST['do'])) {
            $model->step_9_10($this->user->id);
            $this->alertRedirect('success', 'Вы прошли 9-й этап обучения', '/initial-training/step-ten');
        }
    }

    public function stepTenAction()
    {
        $this->trainingRedirect(10);
        $this->site->description = 'Начальное обучение: этап 10-й';
        $site = $this->site;
        $user = $this->user;
        $model = new InitialTraining();
        $training = $model->getTraining($this->user->training);
        $data_operation = $model->getOperation($this->user->id);
        $data_mission = $model->getMission($this->user->id);
        $this->set(compact('site', 'user', 'training', 'data_operation', 'data_mission'));
        if (isset($_POST['do'])) {
            $model->step_9_10($this->user->id);
            $this->alertRedirect('success', 'Вы прошли 10-й этап обучения', '/initial-training/step-eleven');
        }
    }

    public function stepElevenAction()
    {
        $this->trainingRedirect(11);
        $this->site->description = 'Начальное обучение: этап 11-й';
        $site = $this->site;
        $user = $this->user;
        $model = new InitialTraining();
        $training = $model->getTraining($this->user->training);
        $this->set(compact('site', 'user', 'training'));
        if (isset($_POST['do'])) {
            if (empty($_POST['avatar'])) {
                $this->alertRedirect('danger', 'Вы не выбрали аватар');
            } elseif (!in_array($_POST['avatar'], range(1, 8))) {
                $this->alertRedirect('danger', 'Такого аватара нет в игре');
            }
            $model->step_11($this->user->id);
            $this->alertRedirect('success', 'Вы прошли 11-й этап обучения', '/initial-training/step-twelve');
        }
    }

    public function stepTwelveAction()
    {
        $this->trainingRedirect(12);
        $this->site->description = 'Начальное обучение: этап 12-й - последний';
        $site = $this->site;
        $user = $this->user;
        $model = new InitialTraining();
        $training = $model->getTraining($this->user->training);
        $this->set(compact('site', 'user', 'training'));
        if (isset($_POST['do'])) {
            $model->step_12($this->user->id);
            $this->alertRedirect('success', 'Вы прошли все этапы обучения', '/menu');
        }
    }
}

Кто-то может прокомментирует в правильном ли направлении я двигаюсь при переходе с процедурки на ООП?

И ещё конкретный вопрос: вот у меня экземпляр модели используется в каждом экшене, так может мне его сразу запилить в конструкторе?
  • Вопрос задан
  • 1668 просмотров
Решения вопроса 1
Zoominger
@Zoominger
Сись админ
public function stepTwoAction()
...
public function stepThreeAction()
...
public function stepFourAction()
...
public function stepFiveAction()
...
...
...
...
public function stepTwelveAction()


После stepTwelveAction() у меня задёргался глаз и я не смог досчитать.
Вы ведь просто глумитесь?
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@FanatPHP
Нет, ни ООП, ни MVC здесь и рядом не стояли.

Рекомендую вернуться к процедурному и для начала сократить количество функций, убрав дублируемость кода.
Причем как в "контроллерах", так и в "моделях". По хорошему на все шаги должно быть по одному методу и там и там.
Ответ написан
birdyCat
@birdyCat
Все Ваши функции заменяются одной единственной с параметром
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
от 55 000 до 80 000 руб.
СКАИД Москва
от 60 000 руб.
Paxport Москва
от 140 000 до 190 000 руб.