Правильно ли я использую делегирование? Нужен совет правильно ли я использую делегирование . Есть на сайте регистрация , где осуществляется загрузка фото пользователя , есть возможность менять эти изображения в личном кабинете , и еще нужно выводить эти изображения в вюшке пользователю .
В общем есть модель 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";


$result = $db->prepare($sql);
$result->bindParam(':id', $this->user_id, PDO::PARAM_INT);
$result->execute();

return $result->fetchColumn();
}

public static function UploadImage($image)
{

$usersImage = $image['userfile']['tmp_name'];

$imageName = $image['userfile']['name'];

if(is_uploaded_file($image['userfile']['tmp_name'])){

move_uploaded_file($usersImage, $_SERVER['DOCUMENT_ROOT']."/template/images/users/".$image['userfile']['name']);


}

return $imageName;

}
public function UpdateImage($image) {

$usersImage = $image['userphoto']['tmp_name'];

$imageName = $image['userphoto']['name'];

if(is_uploaded_file($image['userphoto']['tmp_name'])){

move_uploaded_file($usersImage, $_SERVER['DOCUMENT_ROOT']."/template/images/users/".$image['userphoto']['name']);


}
$db = Db::getConnection();

$sql = "UPDATE user SET image = '$imageName' WHERE id = $this->user_id ";

$db->query($sql);

return true;

}
}
Все эти операции(добавление , обновление и показ) контролируются в контроллере class UserController extends BaseController {


public function actionProfile($id) {

$user = new User(new Image($id));

if(isset($_POST['submit_photo'])) {

$user->image->updateImage($_FILES);

}

return $this->render('user/profile.php',[

'user' => $user->getUser($id),
'image'=> $user->image->getImage()
]);
}
Правильно ли я все делаю ?

21 Авг 2019 в 06:28
165 +1
0
Ответы
1

Да, вы правильно используете делегирование в вашем коде. Вы создали объект User, который содержит объект Image, и делегируете операции по работе с изображениями этому объекту Image. Такой подход помогает разделить ответственности между классами и улучшает читаемость кода.

Однако, я хотел бы сделать несколько замечаний:

В методе UploadImage класса Image, вы передаете параметры в виде массива $_FILES. Лучше было бы использовать именованные параметры для улучшения читаемости и поддерживаемости кода.

В методе UpdateImage класса Image, вы вставляете данные из $_FILES напрямую в запрос SQL. Это уязвимость к атакам внедрения SQL. Рекомендуется использовать подготовленные запросы для параметризации значений и предотвращения SQL-инъекций.

В методе actionProfile контроллера, у вас отсутствует проверка наличия файла во входных данных $_FILES перед вызовом метода updateImage объекта Image. Добавьте соответствующую проверку.

Надеюсь, эти замечания помогут вам улучшить ваш код.

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