vziks / chat-bundle
Hush ChatBundle
Installs: 13
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Type:symfony-bundle
Requires
- php: ^5.5.9 || ^7.0
This package is not auto-updated.
Last update: 2025-03-29 11:38:15 UTC
README
ChatBundle расширяет функционал symfony, добавляя возможность пользователям обмениваться сообщениями.
Зависимости:
- FosUserBundle
- Sonata Media Bundle
- NelmioApiDocBundle (Опционально для просмотра API документации)
Возможности:
- ChatService реализует сервис - функции для обмена сообщениями. В том числе добавлять медиафайлы (картинки) к сообщениям.
- Rest API для доступа к чат-функциям.
Установка
Предполагается что FosUserBundle и Sonata Media Bundle уже установлены.
Добавляем бандл через composer:
composer require hush\chat-bundle
Регистрируем бандл в приложение:
<?php // app/AppKernel.php public function registerBundles() { return array( // ... new Hush\ChatBundle\ChatBundle(), // ... ); }
Настраиваем config.yml:
doctrine: orm: resolve_target_entities: FOS\UserBundle\Model\UserInterface: AppBundle\Entity\User
Вместо AppBundle\Entity\User необходимо указать ваш конкретный класс, расширяющий базовую модель FOSUserBundle. Это тот же класс, который указан в конфиге как fos_user.user_class.
После этого необходимо расширить структуру БД командой:
php app/console doctrine:schema:update --force
Настройка
Необходимо настроить дополнительный контекст для Media Bundle для сохранения изображений в сообщениях. config.yml
sonata_media: contexts: message: providers: - sonata.media.provider.image formats: small: { width: 150 , quality: 95} big: { width: 500 , quality: 90} providers: image: allowed_extensions: ['jpg', 'png', 'gif', 'jpeg'] allowed_mime_types: ['image/pjpeg','image/jpeg','image/png','image/x-png', 'image/gif']
Для контекста message можно настроить несколько форматов, в примере настроено 2: small и big. После этого необходимо зафиксировать новый контекст в БД:
php app/console sonata:media:fix-media-context
Использование
Возможно 2 варианта использования бандла:
- Прямое использование функций чат-сервиса
- Использование Rest API бандла
Использование функций чат - сервиса
Регистрируем сервис в services.yml
chat: class: Hush\ChatBundle\Service\ChatService arguments: ["@service_container"]
Использование:
$container->get('chat')->someMethod($arguments)
Список методов и их описание смотрите в классе сервиса Hush\ChatBundle\Service\ChatService
Использование Rest API
Регистрируем контроллер в routing.yml:
chat: resource: "@ChatBundle/Resources/config/routing.yml"
Закрываем доступ неавторизованным пользователям в security.yml:
security: access_control: - { path: ^/messages, roles: ROLE_USER }
Также необходимо реализовать метод аутентификации пользователя. Например по определённому apikey пользователя. Для просмотра документации Chat Bundle Rest API необходимо установить и настроить NelmioApiDocBundle.
Кастомизация сериализации сообщений
При необходимости можно использовать свой способ сераилизации сообщений. Для этого необходимо реализовать свой сервис, реализующий интерфейс \Hush\ChatBundle\Service\MessageSerializerInterface Например:
class MyMessageSerializer implements MessageSerializerInterface { public function serializeMessage(Message $message) { return [ 'someparam' => 'somevalue' ]; } }
Зарегистрировать его в services.yml
services: myserializer: class: AppBundle\Service\MyMessageSerializer
И указать его в config.yml
chat: message_serializer: myserializer