Правильно ли я понимаю суть ООП? триньк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');
}
}
}
Кто-то может прокомментирует в правильном ли направлении я двигаюсь при переходе с процедурки на ООП?
И ещё конкретный вопрос: вот у меня экземпляр модели используется в каждом экшене, так может мне его сразу запилить в конструкторе?

21 Авг 2019 в 06:58
256 +1
0
Ответы
1

Да, вы двигаетесь в правильном направлении, переходя от процедурного программирования к ООП. Использование экземпляра модели в каждом экшене имеет смысл, если эти действия действительно касаются работы с данной моделью.

Чтобы сразу инициализировать модель в конструкторе, вам нужно добавить приватное поле в ваш класс, в котором будет храниться экземпляр модели. Затем в конструкторе создать экземпляр модели и присвоить его этому полю. Таким образом, у вас будет общий экземпляр модели для всех методов класса.

Пример:

namespace app\controllers;
use app\models\InitialTraining;
class InitialTrainingController extends AppController
{
private $model;
public function __construct()
{
$this->model = new InitialTraining();
}
public function indexAction()
{
$this->trainingRedirect(1);
$this->site->description = 'Начальное обучение: этап 1-й';
$site = $this->site;
$user = $this->user;
// использование $this->model вместо создания нового экземпляра в каждом методе
$training = $this->model->getTraining($this->user->training);
// остальной код...
}
// остальные методы тоже могут использовать $this->model для работы с моделью
}

Такой подход упростит ваш код и избавит от дублирования кода.

20 Апр 2024 в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир