@zagamay_ru

Symfony 4 как не изобретать велосипед?

Добрый день!

Начинаю изучать фрейворк symfony сразу пошел с 4 версии, я так понял не сильно отличается от предыдущих версий.
Так вот щупаю роутинг, контроллеры, модели (entity).
И думаю надо бы на страницу вывести список тестовых товаров с разбивкой на пагинацию.
Пагинации встроенной нет в коробке, что опечалило меня немного, так как я долгое время сижу на Yii2 и там все это прекрасно реализовано. Да я знаю про бандлы и что их куча, но я попробовал поставить https://github.com/KnpLabs/KnpPaginatorBundle и получил exception (
И тут назрел вопрос, написать самому, что очень просто 1 - 2 максимум класса.
Но как это правильно делать, где создавать эти файлы или надо прям создавать свой бандл и пилить туда два класса?
Так же возник вопрос с Entity, в каждом классе надо геттеры и сеттеры добавлять, но я сделал обертку для этого с __call но в какой директории её держать (я например просто создал папку src/Common)?
Ещё меня подвела валидация, валидация самих entity работает отлично, но когда я хочу свой класс обернуть анотациями валидации то получаю ровным счетом ничего, не работает валидация.
приходится вручную указывать:
/**
     * Rules validate
     *
     * @ToDo наверняка есть проверка на int, поискать
     * @return array
     */
    protected function rules()
    {
        return [
            'limit' => [
                new Assert\NotBlank(),
                new Assert\Regex('/^\d+$/')
            ],
            'count' => [
                new Assert\NotBlank(),
                new Assert\Regex('/^\d+$/')
            ],
            'currentPage' => [
                new Assert\NotBlank(),
                new Assert\Regex('/^\d+$/')
            ]
        ];
    }

и потом прогоняю через валидацию:
/**
     * Validation
     *
     * @return bool
     */
    protected function validate(array $config): bool
    {
        $rules = $this->rules();

        $config = array_intersect_key($config, $rules);

        $validator = Validation::createValidator();

        foreach ($rules as $key => $rule) {
            $valid = $validator->validate($config[$key] ?? null, $rule);

            if (count($valid) > 0) {
                $this->errors[] = $key . ': ' . $valid[0]->getMessage();
            }
        }

        return empty($this->errors);
    }

И тут тоже хочется создать свои модели с валидацией данных.
То есть получается самому надо многое писать, но для командной разработки это не очень хорошо.
Правильно ли я рассуждаю, я из-за своего не знания фреймворка могу так кучу всего своего написать, поэтому прошу подсказать пути решения, может где выложили самые популярные бандлы для 4 версии и если все таки мне захочется как-то упростить себе жизнь и написать пару оберток, то где мне их хранить, чтобы другие разрабы меня поняли?
  • Вопрос задан
  • 555 просмотров
Решения вопроса 1
@Fantyk
web developer
Вы пытаетесь сменить фреймворк, но при этом использовать подходы из старого.

в каждом классе надо геттеры и сеттеры добавлять, но я сделал обертку для этого с __call но в какой директории её держать

С таким подходом проще на yii/laravel оставаться. Вы знаете что phpStorm автогенерирует геттеры/сеттеры? А вот phpDoc вы врятли поддерживаете. Зачем тогда вопросы про "чтобы другие разрабы меня поняли"? Где тут забота о разработчиках?

если все таки мне захочется как-то упростить себе жизнь и написать пару оберток, то где мне их хранить, чтобы другие разрабы меня поняли?

Обертки в конексте валидации - это не бизнес слой, остаются слои инфраструктурный и приложения. Я бы положил этот код в инфраструктурный слой(интерфейс + реализация). Еще вариант: в инфраструктурный слой положить интерфейс, в слое приложения положить вашу реализацию. Про слои я говорю в контексте "слоистой архитектуры"
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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