Я новый программист и работаю над проектом Symfony, который представляет собой простую социальную сеть.Итак, я хочу знать, является ли плохой практикой использование соединения с базой данных непосредственно в храповике, как это:
class Chat implements MessageComponentInterface
{
private $pdo;
protected $clients;
public function __construct() {
$this->pdo = new \PDO('mysql:host=localhost;dbname=symfony_social_network;charset=utf8', 'root', null);;
$this->clients = [];
}
А затем использовать его в таких функциях:
public function onMessage(ConnectionInterface $from, $msg) {
$msgContent = json_decode($msg, true);
switch ( $msgContent['command'] ) {
case 'addMessage':
$this->addMessage($myId, $msgContent, $from);
break;
.....
}
Добавитьфункция сообщения:
private function addMessage($myId, $msg)
{
$acceptUser = htmlspecialchars($msg['acceptUser']);
$dateNow = htmlspecialchars(date('Y-m-d H:i:s'));
$content = htmlspecialchars($msg['content']);
$sql = 'INSERT INTO messages (`accept_user`, `send_user`, `content`, `date_added`, `is_delivered`, `is_seen`)
VALUES (?, ?, ?, ?, ?, ?)';
$stmt = $this->pdo->prepare($sql);
if ( isset($this->clients[$acceptUser]) ) {
$stmt->execute([$acceptUser, $myId, $content, $dateNow, 1, 0]);
}else {
$stmt->execute([$acceptUser, $myId, $content, $dateNow, 0, 0]);
}
return $this->pdo->lastInsertId();
}
Или лучше использовать AJAX.Затем использовать ZMQ для отправки сообщения в веб-сокет, а затем веб-сокет для отправки определенному пользователю.Примерно так:
/**
* @Route("/addMessage", methods={"POST"})
*/
public function addMessage(Request $request) {
....
$context = new \ZMQContext(1);
$socket = $context->getSocket(\ZMQ::SOCKET_PUSH);
$socket->connect("tcp://127.0.0.1:5555");
$socket->send(json_encode($arr));
}