Framework Foton
Инструмент для профессиональной разработки web приложений
Работа с внешними модулями Composer

Модули из composer устанавливаются стандартно через командную строку и размещаются в директории Vendor
Так как на Framework Foton собственный autoload для подключение классов, модули Composer подключаются  только если namespace не найден в пространстве имен экосистемы Foton

Из коробки на Framework Foton установлены 2 модуля:
Monolog Для логирования
Ratchet для работы с WebSocket

Модуль Monolog
Вы можете создать свой модуль на основании текущего:


namespace Dev\Modules;
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
class Log{
    public function add($text){
        $logger = new Logger('my_app');
        $logger->warning($text); 
        $logger->pushHandler(new StreamHandler('app.log'));
    }
}

Модуль Ratcher
Вы можете создать свой модуль 


namespace Dev\Modules;
use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;

class WebSocketHandler implements MessageComponentInterface {
  protected $clients;
  public function __construct() {
    $this->clients = new \SplObjectStorage;
  }
  // Обработчик нового подключения клиента
  public function onOpen(ConnectionInterface $conn) {
    $this->clients->attach($conn);
    echo "New client connected: {$conn->resourceId}\n";
  }
  // Обработчик получения сообщения от клиента
  public function onMessage(ConnectionInterface $from, $msg) {
        foreach ($this->clients as $client) {
              $client->send($msg);
        }
  }
  // Обработчик закрытия соединения клиента
  public function onClose(ConnectionInterface $conn) {
    $this->clients->detach($conn);
    echo "Client disconnected: {$conn->resourceId}\n";
  }
  // Обработчик ошибок соединения
  public function onError(ConnectionInterface $conn, \Exception $e) {
    echo "An error has occurred: {$e->getMessage()}\n";
    $conn->close();
  }
}

Или модуль например apiSocket


namespace Dev\Modules;
use Ratchet\WebSocket\WsServer;
use Ratchet\Http\HttpServer;
use Ratchet\Server\IoServer;
use WebSocketHandler;
class ApiSocket implements AnyApi{
    public function api(){
        $server = IoServer::factory(
        new HttpServer(
            new WsServer(
            new WebSocketHandler()
            )
        ),
        8080
        );
        return $server->run();
    }
}
Для вызова на front-end

DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>WebSocket Chattitle>
head>
<body>
    <div id="messages">div>
    <form>
        <input type="text" id="message" autocomplete="off">
        <button>Sendbutton>
    form>
    <script>
        const socket = new WebSocket('ws://localhost:8080');
        socket.addEventListener('open', function(event) {
            console.log('Connected to server.');
        });
        socket.addEventListener('message', function(event) {
            const messages = document.getElementById('messages');
            const message = document.createElement('div');
            message.innerHTML = event.data;
            messages.appendChild(message);
        });
        const form = document.querySelector('form');
        const input = document.querySelector('input');
        form.addEventListener('submit', function(event) {
            event.preventDefault();
            const message = input.value;
            socket.send(message);
            input.value = '';
        });
    script>
body>
html>


© Copyright 2026 Разработано на Framework Foton
Продукт зарегистрирован в Роспатенте