Как стать автором
Обновить

Комментарии 25

Просьба, если ставите минус статье, то аргументировать в комментарии, что не понравилось. Это позволит мне в будущем исправить ошибки.
Я минус не ставил, но, полагаю, дело в том, что вы де-факто опубликовали перевод мануала:
symfony.com/doc/master/bundles/SonataAdminBundle/getting_started/installation.html
symfony.com/doc/master/bundles/SonataAdminBundle/getting_started/creating_an_admin.html
В этом, конечно, нет ничего плохого, но и полезного мало — кому интересны SonataAdmin и Symfony едва-ли будут испытывать трудности с установкой всего этого добра по официальной инструкции.
Вот здесь я бы поспорил, установка данной системы по офф инструкции может быть той еще проблемой (причем не решенной). Я за все время разработки, раз 5 пытался подружить sonata + symfony, еще ни разу нормального из этого ничего не вышло, то крашилось все из-за несоответствия каких-то версий, то еще какие проблемы, на которые гугл не смог дать ответ. В итоге все забрасывалось и приходилось выбирать другой фреймворк (К примеру, Laravel) или другую админку.
P.S. Я не утверждаю что я гуру php и symfony, но если данный мануал действенный и полностью рабочий, то автору, как говорится, «респект и уважуха»)
Он полностью рабочий на данный момент. В будущем опять все может поменяться. Попробуйте проделать все, что описано в статье, было бы интересно увидеть воспроизводимость не только у меня.

Я минусы не ставил — кармы не хватает, но претензия есть. Ваша статья совсем для нубов. Всё выше описанное есть в документации и ваш перевод не имеет никакой ценности.
Если вы хотите что-то написать про Symfony — пишите о каких-то сложных, интересных и/или нетривиальных решениях, которые не описаны в документации, но вы нашли как это сделать с помощью этого фреймворка.
О том, что вы описали уже существует множество статей, в том числе и на русском языке: [1] [2] [3]. Тысячная статья по установке Symfony, Sonata Admin Bundle, и вы удивляетесь за что минусы? Вы это серьёзно? Люди, которые заинтересованы каким-либо инструментом, уверен, найдут всё необходимое либо на StackOverflow, либо в официальной документации к инструменту, ну а если они не желают учить английский для понимания того, с чем они работают, — значит эта профессия не для них, потому что в этой сфере знание английского уже является де-факто стандартом


[1]: https://devacademy.ru/article/symfony-2-joboard-nachinaem-proekt/
[2]: https://devacademy.ru/article/obzor-komponentov-symfony2-avtorizatsiya/
[3]: https://devacademy.ru/article/symfony-2-joboard-interfejs-administratora/

А какие есть системы для проверки доступа, например есть посты (10 штук), у пользователя есть доступ только к 4, как при листинге и пагинации выводить только те посты которые доступны пользователю?
Эх, никто не читает вводный текст статьи. Я не спорю, что гайдов масса, но есть НО.

Сейчас в основном гайды писались до Symfony 4, с тех пор немного все поменялось и по старым гайдам уже нельзя без проблем все установить. Появились подводные камни, которые можно обойти, но для этого надо искать решение в GitHub разных репозиториев. Весть этот процесс у меня занял день, если бы у меня был актуальный гайд, то потратил бы я не больше часа.

Так что все таки эта статья несет в себе какую-то ценность.
У вас итог не верный. Это не законченная статья

По крайней мере проблемы с которыми я столкнулся, начав изучать Symfony + EasyAdmin
— Загрузка файлов/изображений, множественная загрузка
— AJAX на добавление/изменение Entinty
— Сортировка, фильтрация в grid по колонкам
— …

Проблем полно, из статьи не видно, что вы с ними сталкивались. Проще и намного быстрее сделать CRUD без сонаты. Не видно преимуществ.
Спасибо за идеи для еще одной статьи. Обязательно после написания укажу как продолжение в конце этого материала.

Да, верно вы подметили, что с вашими проблемами я пока не сталкивался, потому что мне было достаточно того, что я описал в статье.

CRUD можно и без Sonata сделать, но перед этим нужно задать себе вопрос — этот проект будет развиваться дальше или нет. От ответа зависит выбор CRUD или Sonata. Если проект будет развиваться, то однозначно Sonata или аналоги. Банально поддержка своего CRUD будет обходится дороже. Если проект типа сайта визитки с парой табличек, то здесь можно и самому написать.

Точнее все строго наоборот.


Если проект будет развиваться, то первым делом надо будет выпилить сонату

Расскажите о своём опыте. Наверняка у вас есть что сказать про ограничения и недостатки Sonata Admin. Я эту библиотеку не защищаю, она просто в топе Google при поиске административной части для Symfony.

По мере перехода к логике бизнеса (а не CRUD) у вас будет появляться все больше и больше кастомных страниц.
В итоге внезапно выясниться что практически ничего из того что есть в Сонате вас не удовлетворяет потому что стандартное не совсем подходит бизнесу, а нестандартное писать мешает сама Соната (есть альтернатива расширения — просто вписывать нужные вам рендеры самостоятельно сделанных страниц и действий на ее роуты — но тут возникает вопрос, а зачем собственно говоря вам тогда сама Соната?)

В общем чем больше у вас разной логики взаимодействия — тем хуже под нее подходят стандартные рецепты предлагаемые вам этим расширением.
Запускаем встроенный веб сервер Symfony.

symfony serve


Эта команда доступна только после установки Symfony CLI которая далеко не встроена в Symfony это отдельное приложение со своим инсталятором под каждую OS.
Спасибо, дополнил.

До этой статьи я сам устанавливал по офф. документации и решил попробовать установить как в этой статье.
Я так понял подводные камни немного оставили для читателей статьи.
Например вы пишите:


# config/packages/framework.yaml
framework:
    translator: { fallbacks: ['%locale%'] }

Даёт ошибку.


You have requested a non-existent parameter "locale".

и это очевидно, т.к. нужно указать locale в параметрах (например в services.yaml):


# config/services.yaml
parameters:
    locale: 'ru'
Спасибо за замечание. Действительно при написании статьи в сам материал этот кусок вставил, а вот в проект не добавил и поэтому пропустил. Исправил.
Вот бы мне такого программиста на Symfony4)
Извините что не по теме
Sonata кидает тысячи deprecation-ов в логи.
Как у них с развитием, знает кто-нибудь? В смысле, дальше-то пилят или всё?
Могу ответить только опосредовано. Судя по коммитам, то какое-то развитие есть. Смотрели issues на github? Есть там что об такого рода ошибках?
тихо, по инструкции, не ставится уже на первых шагах. Т.е. нубы, как автор коммента, не смогут поставить. На этапе ORM возникли проблемы. Symfony крут тем, что если официальным ман написан, то он работает. Было бы здорово, если и комьюнити придерживалось этой политики.

Опишите более подробно что сделали и что получили, это поможет мне понять и помочь вам

Добрый день. Спасибо за сжатую статью, которая спасает от выпадения глаз при вычитывании тонн документации. Спасает при знакомстве с Симфони. К сожалению, возникли некоторые проблемы, так как сжатый характер статьи имеет и обратную сторону. Банально не хватает комментариев, «что, зачем, какие варианты».

Во-первых, можете уточнить по тексту:
1) у вас тут идёт:
Устанавливаем Sonata Admin
$ composer require sonata-project/admin-bundle
Для того, чтобы взаимодействовать с базой данных...
такое ощущение, что данную команду требуется применять, только если хочешь установить все три последующие библиотеки. Так ли, или обязательно?
2) У вас создаются сущности City и Address. Правильно ли я понимаю, что они введены только для примера применения на них ролей. А то по ходу текста вначале складывается впечатление, что они часть механизма админки или авторизации. К сожалению, «само собой разумеещеся» у всех разное.

Во-вторых, собственно проблемы.
3) При настройке Doctrine появилась ошибка:
Unrecognized options «SonataUserBundle, FOSUserBundle» under «doctrine.orm.entity_managers.default.mappings.App»
При перестройке конфига Симфони благополучно вырезал кусок, который требовался далее. загуглив, получил следующее решение:
doctrine:
...
    orm:
        auto_generate_proxy_classes: true
        naming_strategy: doctrine.orm.naming_strategy.underscore
        auto_mapping: true
        mappings:
            App:
                is_bundle: false
                type: annotation
                dir: '%kernel.project_dir%/src/Entity'
                prefix: 'App\Entity'
                alias: App
            SonataUserBundle: ~
            FOSUserBundle: ~
что-то связанное с использованием обрезанных и полных конфигов.

4) При задании config/packages/security.yaml
security:
    ...
    acl:
        connection: default
вылетала следующая ошибка: «Unrecognized option „acl“ under „security“». Что решается перемещением параметра acl вне блока security:
security:
    ...
acl:
    connection: default


5) Последняя проблема, через которую мне никак не удаётся пробиться.
При выполнении завершающей части статьи получаю в итоге: Access Denied. AccessDeniedException in \vendor/symfony/security-http/Firewall/AccessListener.php (line 76).
Что связано с тем, что доступ на страницу /admin требует наличия ролей ROLE_, ROLE_ADMIN, ROLE_SONATA_ADMIN (не знаю И или ИЛИ), а у созданного пользователя --super-admin есть только ROLE_SUPER_ADMIN и ROLE_USER.
Если прямо в коде, где создаётся карта адресов добавить роль D:/OSPanel/domains/sym2/vendor/symfony/security-http/Firewall/AccessListener.php::__invoke()
        list($attributes) = $this->map->getPatterns($request);
        $attributes[] = 'ROLE_SUPER_ADMIN';
, то удаётся прошибиться в саму админку (то есть получил доступ). Однако, какие роли/метки там надо дальше добавить пользователю, чтобы можно было убрать эту инъекцию? Взгляд в БД тоже не спасает.
Можете разъяснить, как побороть данную проблему?

Спасибо
Здравствуйте. Спасибо за замечания. Попробовал по своему же гайду все поставить и столкнулся с описанными проблемами.
  1. Дополнил текст
  2. Добавил пояснение что это для примера
  3. Исправил config, что бы он более соответствовал настройками по-умолчанию. Теперь проблем не будет.
  4. Просто забыл убрать из security секцию acl. Эта секция и так вынесена в отдельный файл. Так же я еще нашел проблему с командой acl:init, она была у меня init:acl.
  5. Не получилось воспроизвести. Попробуйте еще раз сначала создать проект и пройти все пункты.
А что надо подключить в сонате чтобы он понимал строковые типы, а то везде в документации пишут можно писать код вида $formMapper->add('title', 'string'); но на него ругается и приходится везде переписывать в $formMapper->add('title', TextType::class);
Тол бандл какой еще надо подключить, может use не хватает. Незнаю что сделать.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации