Задать вопрос
  • Как улучшить код?

    @fasewyby Автор вопроса
    Vitsliputsli, DbExeption пишет в логи и уведомляет юзера о проблемах с БД.

    2) if ($image) - в условии пишите, что конкретно проверяете, а не что получится если неизвестно что кастануть в bool. Например is_null($image) или что у вас там по смыслу.

    В $image либо путь к картинке либо null.
    Написано
  • Как улучшить код?

    @fasewyby Автор вопроса
    pLavrenov, $data - это массив после валидации. Из контроллера передается.
    $validated = $request->validated();
    
    if ($request->hasFile('image')) {
        $validated['image'] = $imageUploader->uploadPostImage($request->file('image'));
    }
    
    $this->postQueries->update($post, $validated);
    Написано
  • Как улучшить код?

    @fasewyby Автор вопроса
    Про названия массивов во множественном числе не понял.
    Написано
  • Как улучшить код?

    @fasewyby Автор вопроса
    Владислав Лысков, модели? Или этого же класса?
    Написано
  • Как улучшить код?

    @fasewyby Автор вопроса
    maksam07,

    1. Да, я там забыл добавить. С условием, разумеется.
    2. Да, там $data['image']
    3. Просто все запросы вынес из модели. Ну типо сервиса/репозитория. Сохранить, обновить, удалить, достать популярные посты, последнии и т.д.
    4. У меня для загрузки изображений есть класс ImageUploader. Для удаления я что-то не увидел смысла создавать новый. Хотя у меня еще есть работа с аватарками пользователей.

    В контроллере так:
    $validated = $request->validated();
    
    if ($request->hasFile('image')) {
        $validated['image'] = $imageUploader->uploadPostImage($request->file('image'));
    }
    
    $this->postQueries->update($post, $validated);
    Написано
  • Как правильно вывести ошибки регистрации?

    @fasewyby Автор вопроса
    Ипатьев, а как я передам через эту функцию?
    function redirect($url = ''): void
    {
    	if ($url) {
    		$redirect = $url;
    	} else {
    		$redirect = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/';
    	}
    
    	header("Location: {$redirect}");
    	exit;
    }
    Написано
  • Как правильно вывести ошибки регистрации?

    @fasewyby Автор вопроса
    Ипатьев, разве так не правильно?
    $router->get('users/register', [Controllers\UserController::class, 'register']);
    $router->post('users/registerStore', [Controllers\UserController::class, 'registerStore']);
    Написано
  • Как правильно вывести ошибки регистрации?

    @fasewyby Автор вопроса
    Я же из-за ридеректа сессии начал использовать. Как эти переменные потом передать?

    По поводу экранирования, ошибки же в в самом инстансе валидатора хранятся, зачем их экранировать?
    Написано
  • Как правильно вывести ошибки регистрации?

    @fasewyby Автор вопроса
    Ипатьев, URI остается /users/registerStore, а должен быть /users/register.
    Написано
  • Как правильно вывести ошибки регистрации?

    @fasewyby Автор вопроса
    Дмитрий, это не фреймворк. Я сам пишу.
    Написано
  • Как спроектировать роутер?

    @fasewyby Автор вопроса
    Ипатьев, спасибо, аннотациями все разрулилось :)
    Написано
  • Как спроектировать роутер?

    @fasewyby Автор вопроса
    Ипатьев, контенер есть, чтобы все модели и виды и все остальное связать с контроллерами заняло строк 70 наверно. Ручное связывание, вроде так называется. Ну и в сам роутер передается этот контейнер. С автовайрингом не получится, потому что некоторые классы принимают скалярные типы.

    Есть мнение, что контейнер нужен для хранения общих объектов для всего приложения, соединение с базой и т.п. Вот и задумался как сделать без пихания контроллеров в контейнер.
    Написано
  • Как работать с DI-контейнером?

    @fasewyby Автор вопроса
    Благодарю за подробный ответ. Хочу написать свой контейнер, но прочитав несколько статей на эту тему запутался.

    Т.е. контроллеры не должны быть в DI? Я делал так, в роутер передавал контейнер, а в контейнере регистрировал все контроллеры, вместо массива с настройками подключения к БД сделал класс с конфигом, все работало, пока я не дошел до пагинации.

    Я думал, что объекты, общие для всего приложения регистрируются в сервис-контейнере. Но в чем разница между DI-контейнером и сервис-контейнером не понимаю.
    Написано