yurygolikov
@yurygolikov

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

Я начинающий разраб. php. Сейчас беру разные проекты на самописных системах и т.д.
Я понял, что мне надоело много раз писать одно и тоже. Выбор пал либо изучить cms, либо какой-нить фреймворк. С cms мне понятно, например WordPress, там куча готовых уже решений в качестве плагинов и тем, и если что то не хватает, просто "изменить" плагин или тему и все будет как задумал заказчик.
Но вот у меня вопрос с фреймворками, они дают уже готовые решения, или нужно как то отдельно подключать. Я вот не слышал популярных библиотек php. У js есть jquery, а у php что?
Например, такая банальность, как валидация форм: у меня есть собственные наработки и я могу их использовать, но ведь они далеки от идеала. Есть ли подобные отработанные решения в фреймворках, они дают что-то кроме "каркаса"?
И почему нет библиотек популярных для php?
Прошу не кидаться камнями, я часто гуглю, но как то по этому вопросу в голове пазл не собрался.
Буду благодарен любым ответам и советам, спасибо)
  • Вопрос задан
  • 360 просмотров
Решения вопроса 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?

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

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

Похожие вопросы