Как правильно обращаться к классу из других классов? Всем привет! Помогите понять, правильно ли я делаю аутентификацию и запросы к данным связанным с ней..
Пишу на сайте API для приложения и вот встал вопрос с аутентификацией (не путить с авторизацией)
Все запросы к API делаются через один файл (скажем index.php
В этом файле создается объект класса Auth (Singleton) который проверяет token и получает данные (ID, Группу, Разрешения для этой группы и т.д.) о текущем пользователе из БД
Дальше проверяется вызванный метод API и подключается необходимый файл (класс) через require_once
И тут проблема. Например, мне нужно проверить может ли пользователь писать комментарии или посты и т.д.
И для этого мне нужно сделать проверку в методе $Auth->checkRole('add_comments') из класса AddCommen
Для того, чтобы обращаться к классу Auth из другого класса, мне приходится в каждом классе, который обращается к классу Auth, в конструкторе, создавать свойство через метод $this->auth = $Auth::getInstance(
Ну а дальше понятно, в любом методе класса AddComment я просто обращаюсь к классу Auth через свойство $this->auth как к объекту класса
Правильный ли это подход? Ведь мне нужно практически в каждом классе API обращаться к классу Auth, а значит и в каждый конструктор добавлять эту строку $this->auth = $Auth::getInstance()

21 Авг 2019 в 07:00
122 +1
0
Ответы
1

Действительно, создание свойства $this->auth в каждом классе API через $Auth::getInstance() в конструкторе может быть не самым оптимальным подходом, так как это может привести к дублированию кода и ухудшить читаемость и поддерживаемость кода.

Вместо этого, рекомендуется использовать Dependency Injection (внедрение зависимостей) для передачи объекта класса Auth в каждый класс, который его использует. Например, можно передавать объект Auth как аргумент при создании экземпляра класса AddComment:

class AddComment
private $auth
public function __construct(Auth $auth)
$this->auth = $auth

public function someMethod()
// использование $this->auth для доступа к методам Aut

}

Таким образом, при создании экземпляра класса AddComment в Index.php, вы можете передать объект Auth в конструктор:

$auth = $Auth::getInstance()
$addComment = new AddComment($auth);

Это позволит избежать дублирования кода и делает ваш код более гибким и удобным для поддержки и расширения.

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