proklung / core-argument-resolvers-bundle
Core argument resolvers for custom Symfony
Installs: 2
Dependents: 1
Suggesters: 0
Security: 0
Stars: 1
Watchers: 1
Forks: 0
Open Issues: 0
Type:symfony-bundle
Requires
- php: >=7.3 || ^8.0
- doctrine/annotations: ^1.10
- proklung/base-exception: ^1.0
- symfony/config: ^4.4 || ^5.0
- symfony/dependency-injection: ^4.4 || ^5.0
- symfony/event-dispatcher: ^4.4 || ^5.0
- symfony/framework-bundle: ^4.4 || ^5.0
- symfony/http-kernel: ^4.4 || ^5.0
- symfony/polyfill-php80: ^1.20
- symfony/security-csrf: ^4.4 || ^5.0
- symfony/serializer: ^4.4 || ^5.0
Requires (Dev)
README
INTERNAL
"Core" бандл.
Установка
composer.json:
"repositories": [ { "type": "git", "url": "https://github.com/proklung/core.argument.resolvers.bundle" } ]
composer require proklung/core-argument-resolvers-bundle
Конфигурационный файл
По адресу local/packages/custom_arguments_resolvers.yaml
(или /config/packages/custom_arguments_resolvers.yaml
для Wordpress).
Пример:
custom_arguments_resolvers: defaults: enabled: true params: # Какие конкретно листенеры запретить (ID сервиса). disabled_resolvers: # - custom_arguments_resolvers.argument_resolver.ajax_call - custom_arguments_resolvers.argument_resolver.csrf_token_checker_annotation # Обрабатывать только контроллеры, не зарегистрированные сервисами. process_only_non_service_controller: false # Классы контроллеров, подлежащие обработке. classes_controllers: - 'Symfony\Bundle\FrameworkBundle\Controller\AbstractController' - 'Symfony\Bundle\FrameworkBundle\Controller\Controller'
Комплект
custom_arguments_resolvers.argument_resolver.set_session
- установить сессию Symfony для всех запросов к контроллерамcustom_arguments_resolvers.argument_resolver.validator_csrf_token
- валидатор CSRF токенаcustom_arguments_resolvers.argument_resolver.security_token_checker
- проверка токена безопасности (по трейтуSecurityTokenTrait
)custom_arguments_resolvers.argument_resolver.form_url_encoded
- обработка запросов x-www-form-urlencodedcustom_arguments_resolvers.argument_resolver.set_container
- пропихивание контейнера в контроллерcustom_arguments_resolvers.argument_resolver.ajax_call
- проверка вызова на AJAXcustom_arguments_resolvers.argument_resolver.from_container
- ресолвинг аргументов из контейнераcustom_arguments_resolvers.boot_trait
- bootable traits (по аналоги c)custom_arguments_resolvers.argument_resolver.user_permission_check
- проверка прав на роут
Прочее
Кэширование роутов
routes.yaml:
foo_controller: path: /foo/bar/ methods: GET controller: 'Local\Controllers\FooController::action' defaults: _cacheble: true # Кэшировать _cacher: 'example.cacher' # Сервис-кэшер, реализующий интерфейс Symfony\Contracts\Cache\CacheInterface
Ограничения:
- кэшируются только GET запросы.
Ресолвинг аргументов контроллера из "делегированных" контейнеров
Делегированный контейнер - любой сервис, возвращающий Symfony\Component\DependencyInjection\ContainerInterface
,
и содержащий в возвращаемом полноценный контейнер.
Зачем?
Чтобы можно было автовайрить аргументы из контейнеров модулей, плагинов и тому подобных мест.
Конфигурирование
module_notifier_container: class: Symfony\Component\DependencyInjection\ContainerInterface factory: ['Proklung\Notifier\DI\Services', 'getInstance'] tags: - { name: 'delegated.container' }
Сервисы в делегированном контейнере должны быть публичными.
Делегированные контейнеры имеют приоритет. Если два одинаковых сервиса объявлены в основном и дополнительном контейнере, то в дело пойдет сервис из внешнего контейнера.