Правильно ли я использую делегирование? Нужен совет правильно ли я использую делегирование . Есть на сайте регистрация , где осуществляется загрузка фото пользователя , есть возможность менять эти изображения в личном кабинете , и еще нужно выводить эти изображения в вюшке пользователю . В общем есть модель User class User {
public $image;
public function __construct($image) { $this->image = $image; }
public function getUser($id) {
$db = Db::getConnection();
$sql = "SELECT * FROM user WHERE id = :id"; $stmt = $db->prepare($sql); $stmt->bindParam(':id', $id, PDO::PARAM_INT); $stmt->execute();
return $stmt->fetch();
}
} Есть модель Image для работы с изображениямиclass Image {
private $user_id;
public function __construct($id) { $this->user_id = $id; } public function getImage() {
$db = Db::getConnection();
$sql = "SELECT IF(image IS NULL or image = '','no_image.png',image) as image FROM `user` WHERE id = :id";
Да, вы правильно используете делегирование в вашем коде. Вы создали объект User, который содержит объект Image, и делегируете операции по работе с изображениями этому объекту Image. Такой подход помогает разделить ответственности между классами и улучшает читаемость кода.
Однако, я хотел бы сделать несколько замечаний:
В методе UploadImage класса Image, вы передаете параметры в виде массива $_FILES. Лучше было бы использовать именованные параметры для улучшения читаемости и поддерживаемости кода.
В методе UpdateImage класса Image, вы вставляете данные из $_FILES напрямую в запрос SQL. Это уязвимость к атакам внедрения SQL. Рекомендуется использовать подготовленные запросы для параметризации значений и предотвращения SQL-инъекций.
В методе actionProfile контроллера, у вас отсутствует проверка наличия файла во входных данных $_FILES перед вызовом метода updateImage объекта Image. Добавьте соответствующую проверку.
Надеюсь, эти замечания помогут вам улучшить ваш код.
Да, вы правильно используете делегирование в вашем коде. Вы создали объект User, который содержит объект Image, и делегируете операции по работе с изображениями этому объекту Image. Такой подход помогает разделить ответственности между классами и улучшает читаемость кода.
Однако, я хотел бы сделать несколько замечаний:
В методе UploadImage класса Image, вы передаете параметры в виде массива $_FILES. Лучше было бы использовать именованные параметры для улучшения читаемости и поддерживаемости кода.
В методе UpdateImage класса Image, вы вставляете данные из $_FILES напрямую в запрос SQL. Это уязвимость к атакам внедрения SQL. Рекомендуется использовать подготовленные запросы для параметризации значений и предотвращения SQL-инъекций.
В методе actionProfile контроллера, у вас отсутствует проверка наличия файла во входных данных $_FILES перед вызовом метода updateImage объекта Image. Добавьте соответствующую проверку.
Надеюсь, эти замечания помогут вам улучшить ваш код.