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