yurygolikov
@yurygolikov

Как не «изобретать велосипед», а использовать готовые решения?

Я начинающий разраб. php. Сейчас беру разные проекты на самописных системах и т.д.
Я понял, что мне надоело много раз писать одно и тоже. Выбор пал либо изучить cms, либо какой-нить фреймворк. С cms мне понятно, например WordPress, там куча готовых уже решений в качестве плагинов и тем, и если что то не хватает, просто "изменить" плагин или тему и все будет как задумал заказчик.
Но вот у меня вопрос с фреймворками, они дают уже готовые решения, или нужно как то отдельно подключать. Я вот не слышал популярных библиотек php. У js есть jquery, а у php что?
Например, такая банальность, как валидация форм: у меня есть собственные наработки и я могу их использовать, но ведь они далеки от идеала. Есть ли подобные отработанные решения в фреймворках, они дают что-то кроме "каркаса"?
И почему нет библиотек популярных для php?
Прошу не кидаться камнями, я часто гуглю, но как то по этому вопросу в голове пазл не собрался.
Буду благодарен любым ответам и советам, спасибо)
  • Вопрос задан
  • 359 просмотров
Решения вопроса 5
Denormalization
@Denormalization
Собственно https://packagist.org/ как раз таки собрание "библиотек" для PHP.
Читаем про Composer и как им пользоваться.

Фреймворки дают каркас + базовый функционал (какой-то больше, какой-то меньше) и дальше уже на этой основе строишь своё приложение.
Ответ написан
Rou1997
@Rou1997
У js есть jquery, а у php что?

Фреймворки - Yii2, Laravel - и микрофреймворки.

Но вот у меня вопрос с фреймворками, они дают уже готовые решения, или нужно как то отдельно подключать.

Фреймворк - "комплекс" готовых решений, микрофреймворк - фреймворк для узкого круга задач, jQuery скорее микрофреймворк, и есть библиотеки, для еще более узкого круга.
Ответ написан
Комментировать
@An_cher89
Фрилансер
Компоненты symfony очень даже хороший набор библиотек. Он используется в таких фреймоврках как symfony =) , laravel, микрофреймворк silex, в cms drupal и много где еще. А подключать все это добро в проект, как сказали выше, можно при помощи composer
Ответ написан
index0h
@index0h
PHP, Golang. https://github.com/index0h
У js есть jquery, а у php что?

HttpFoundation - это можно сказать стандарт для обработки запросов. Используется в Symfony, Laravel, Silex и еще куча где.
Doctrine - по моему опыту это лучшая система для работы с БД. Если еще не смотрели - настоятельно рекомендую. А системы реализующие ActiveRecord (если у вас проект не на пару дней) - лучше не используйте, почему - см. тут.
Monolog - это библиотека логгирования, практически не имеет аналогов по функциональности.
Symfony Console Component - очень гибкий компонент для реализации консольных приложений.

Например, такая банальность, как валидация форм: у меня есть собственные наработки и я могу их использовать, но ведь они далеки от идеала.

Разные кейсы предполагают разные решения. В случае высоких требований к производительности, тестируемости и защищенности часто оптимален вариант типа этого:

/**
 * @Route("/profile/{id}", name="getProfile")
 * @Method({"GET"})
 * @param Request $request
 * @return JsonResponse
 */
public function getProfileAction(Request $request): JsonResponse
{
    try {
        $id = $request->attributes->get('id');
        
        if (is_null($id)) {
            return new JsonResponse("Param 'id' is required", JsonResponse::HTTP_BAD_REQUEST);
        } elseif (!is_string($id)) {
            return new JsonResponse("Param 'id' must be string", JsonResponse::HTTP_BAD_REQUEST);
        } elseif (!ctype_digit($id)) {
            return new JsonResponse("Param 'id' must be digit", JsonResponse::HTTP_BAD_REQUEST);
        }
        
        // Business logic here
        return new JsonResponse();
    } catch (\Throwable $exception) {
        return new JsonResponse($exception->getMessage(), JsonResponse::HTTP_BAD_REQUEST);
    }
}


Да, кода получается МНОГО, но такой подход очень гибок и производителен. Есть альтернативный вариант с использованием библиотеки ko-ko-ko/php-assert

try {
    $id = $request->attributes->get('id');
    Assert::assert($id, 'id')->notNull()->string()->digit();
} catch (\Throwable $exception) {
    return new JsonResponse($exception->getMessage(), JsonResponse::HTTP_BAD_REQUEST);
}
try {
    // Business logic here
    return new JsonResponse();
} catch (\Throwable $exception) {
    return new JsonResponse($exception->getMessage(), JsonResponse::HTTP_BAD_REQUEST);
}


Есть ли подобные отработанные решения в фреймворках, они дают что-то кроме "каркаса"?

Есть, практически у каждого фреймворка свои решения со своими плюсами и минусами.

И почему нет библиотек популярных для php?

см. Самое началом моего ответа, там список популярных библиотек.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы