Skip to content

Vziks/ChatBundle

Repository files navigation

Hush ChatBundle

ChatBundle расширяет функционал symfony, добавляя возможность пользователям обмениваться сообщениями.

Зависимости:

Возможности:

  • 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

About

Symfony2 ChatBundle

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages