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
Регистрируем контроллер в 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