Comments 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 едва-ли будут испытывать трудности с установкой всего этого добра по официальной инструкции.
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/
минусов не ставил, но так, ИМХО — зачем соната, если есть https://github.com/EasyCorp/EasyAdminBundle
и зачем symfony-acl если есть https://symfony.com/doc/current/security/voters (ну, по крайней мере, в большинстве случаев этого достаточно)
Сейчас в основном гайды писались до Symfony 4, с тех пор немного все поменялось и по старым гайдам уже нельзя без проблем все установить. Появились подводные камни, которые можно обойти, но для этого надо искать решение в GitHub разных репозиториев. Весть этот процесс у меня занял день, если бы у меня был актуальный гайд, то потратил бы я не больше часа.
Так что все таки эта статья несет в себе какую-то ценность.
По крайней мере проблемы с которыми я столкнулся, начав изучать Symfony + EasyAdmin
— Загрузка файлов/изображений, множественная загрузка
— AJAX на добавление/изменение Entinty
— Сортировка, фильтрация в grid по колонкам
— …
Проблем полно, из статьи не видно, что вы с ними сталкивались. Проще и намного быстрее сделать CRUD без сонаты. Не видно преимуществ.
Да, верно вы подметили, что с вашими проблемами я пока не сталкивался, потому что мне было достаточно того, что я описал в статье.
CRUD можно и без Sonata сделать, но перед этим нужно задать себе вопрос — этот проект будет развиваться дальше или нет. От ответа зависит выбор CRUD или Sonata. Если проект будет развиваться, то однозначно Sonata или аналоги. Банально поддержка своего CRUD будет обходится дороже. Если проект типа сайта визитки с парой табличек, то здесь можно и самому написать.
Точнее все строго наоборот.
Если проект будет развиваться, то первым делом надо будет выпилить сонату
Расскажите о своём опыте. Наверняка у вас есть что сказать про ограничения и недостатки Sonata Admin. Я эту библиотеку не защищаю, она просто в топе Google при поиске административной части для Symfony.
В итоге внезапно выясниться что практически ничего из того что есть в Сонате вас не удовлетворяет потому что стандартное не совсем подходит бизнесу, а нестандартное писать мешает сама Соната (есть альтернатива расширения — просто вписывать нужные вам рендеры самостоятельно сделанных страниц и действий на ее роуты — но тут возникает вопрос, а зачем собственно говоря вам тогда сама Соната?)
В общем чем больше у вас разной логики взаимодействия — тем хуже под нее подходят стандартные рецепты предлагаемые вам этим расширением.
Запускаем встроенный веб сервер 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'
Извините что не по теме
Как у них с развитием, знает кто-нибудь? В смысле, дальше-то пилят или всё?
Во-первых, можете уточнить по тексту:
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';
, то удаётся прошибиться в саму админку (то есть получил доступ). Однако, какие роли/метки там надо дальше добавить пользователю, чтобы можно было убрать эту инъекцию? Взгляд в БД тоже не спасает.Можете разъяснить, как побороть данную проблему?
Спасибо
- Дополнил текст
- Добавил пояснение что это для примера
- Исправил config, что бы он более соответствовал настройками по-умолчанию. Теперь проблем не будет.
- Просто забыл убрать из security секцию acl. Эта секция и так вынесена в отдельный файл. Так же я еще нашел проблему с командой acl:init, она была у меня init:acl.
- Не получилось воспроизвести. Попробуйте еще раз сначала создать проект и пройти все пункты.
Тол бандл какой еще надо подключить, может use не хватает. Незнаю что сделать.
Установка и настройка Sonata Admin на Symfony 4