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

триньк
<?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');
        }
    }
}

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

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


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

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

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

Войти через центр авторизации
Похожие вопросы
ЧИТАЙ-ГОРОД Москва
от 140 000 до 210 000 ₽
DANYCOM Краснодар
от 50 000 до 100 000 ₽
Директ Кредит Казань
от 70 000 до 120 000 ₽
09 апр. 2020, в 03:29
3000 руб./за проект
09 апр. 2020, в 02:02
3000 руб./за проект
09 апр. 2020, в 01:55
1500 руб./за проект