Имеет смысл убрать из контроллеров некоторые переменные? Вопрос

05 Января 2023 (ред)

Приветствую. Есть вопрос. У меня постоянно в модели передаются данные того, кто смотрит.

Пример, в данном случае передается user_id:

// App\Controllers\Auth\RecoverController
SettingModel::editPassword(['id' => $user_id, 'password' => $newpass]);

Возможно в самой модели надо просто использовать что-то подобное:

public function __construct()
{
    $this->user = UserData::get();
}

Но в виду того, что это надо почти в каждой модели, может тогда имеет смысл сделать прослойку (расширить модель):

Это:

class FolderModel extends \Hleb\Scheme\App\Models\MainModel

Поменять на:

// создать BaseModel
class FolderModel extends BaseModel

Сократится в контроллерах, методах, количество передаваемых переменных, но добавится это в моделях. Собственно в модели перенесется.

Ещё пример:

Было

$latest_answers = HomeModel::latestAnswers($this->user);
$topics_user    = HomeModel::subscription($this->user['id']);

Станет:

$latest_answers = HomeModel::latestAnswers();
$topics_user    = HomeModel::subscription();

Имеет смысл?

Evg Evg + 17

1 Ответ

  1. Добрый день! Вот в этом случае

    SettingModel::editPassword(['id' => $user_id, 'password' => $newpass]);

    если подразумевается, что есть необходимость менять пароль произвольному пользователю, а не только текущему, то этот метод имеет место быть. Для упрощения в коде вы можете добавить метод

    public static function editPassword(int $userId, string $newpass) {
        // ...
    }
    public static function editCurrentUserPassword(string $newpass) {
       return self::editPassword(UserData::getId(), $newpass);
    }

    и пользоваться и тем и тем. Создавать через конструктор не во всех случаях полезно, так как не во всяком обращении к модели пользователей вам нужен именно текущий пользователь, впридачу методы здесь статичные в модели и обращение идёт к классу, а не объекту.

    1
    fomiash 05 Января 2023 (ред.)
  1. Спасибо + Evg 05 Января 2023


Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.