Зависимость от класса

116
21 февраля 2021, 23:50

Все привет.

Возник такой вопрос. Как лучше использовать класс внутри метода моего контроллера? Код ниже:

<?php
namespace app\Controller;
use app\Models\Territory;
class RegisterController extends Controller
{
    public function index()
    {
        $this->checkSessionAndViewConnection();
        $objTerritory = new Territory();
        View::generate('form', $this->getConfiguration(), json_encode($objTerritory->getArea()));
    }
}

Получается, что метод зависит от этого класса. Я очень хочу научиться правильно писать код.

Если я правильно понимаю, то за это отвечает один из принципов SOLID (инверсия зависимостей), но я немного не понимаю когда применять его.

У меня есть три варианта использовать сторонний класс в методе:

  1. Как и сейчас у меня сделанно.
  2. Передать объект класса как аргумнтом в метод.
  3. Создать private свойство в контроллере и при создании объекта контролера в методе __construct присваивать в это свойство объект класса и дальше его использовать.

Можете пожалуйста подсказать мне, как правильно делать в такой ситуации?

Answer 1

Создайте trait GenerateForm. Подключите в любой контроллер где необходима генерация данной формы регистрации. use GenerateForm и вызывайте нужные методы для обработки. пример:

class RegisterController extends Controller
{
    use GenerateForm;
    public function index()
    {
        ...
        return $this->generateForm($this->getConfiguration());
    }
}

// TRAIT
...
use app\Models\Territory;
trait GenerateForm {
    public function generateForm($config) {
        $objTerritory = new Territory();
        return View::generate('form', $config, json_encode($objTerritory->getArea()));
    }
}

тем самым Вам не нужно создавать объект класса для жесткой привязки. Данный объект будет создавать трейт в случае необходимости. Ну если я правильно понял задачу.

READ ALSO
PHP. Поиск данной по двумерном массиве

PHP. Поиск данной по двумерном массиве

у меня есть такой массив(как показано на картинке) Мне нужно находить данную по product_id

116
Сделать блок кликабельным через сss

Сделать блок кликабельным через сss

Есть код при наведении на объект появляется полеКак сделать так что бы поле появлялось при клике и не исчезало пока не кликнешь второй раз

164
Создать внешний ключ

Создать внешний ключ

Не понимаю в чём может быть проблемаЕсть две таблицы

156