let socket;
let cookieUserId = $.cookie('userId');
let reconnectAttempts = 0;
const MAX_RECONNECT_ATTEMPTS = 100;
function tryToConnect() {
socket = new WebSocket('wss:// ... /?userId='+cookieUserId); // замените на ваш адрес сервера
socket.onopen = onSocketOpen;
socket.onmessage = onSocketMessage;
socket.onclose = onSocketClose;
socket.onerror = onSocketError;
}
function onSocketOpen(e) {
console.log('Успешное соединение');
reconnectAttempts = 0; // сбрасываем число попыток при успешном подключении
... // ваш код при успешном соединении
};
function onSocketClose(e) {
console.log('Соединение закрыто. Попытка повторного подключения');
if (reconnectAttempts < MAX_RECONNECT_ATTEMPTS) {
setTimeout(() => tryToConnect(), 2000); // повторное подключение через 1 секунду
reconnectAttempts++;
}
else {
console.log('Слишком много попыток соединения. Соединение невозможно, попробуйте позже');
}
}
function onSocketError(e) {
console.log('Ошибка соединения');
...
}
function onSocketMessage(e) {
console.log('You have a new message');
...
}
document.addEventListener('DOMContentLoaded', () => {
tryToConnect(); // начинаем соединение после загрузки DOM
});
window.onfocus = function(){
console.log('Окно активно');
if (socket.readyState !== 1) { // если за время неактивности окна соединение прервалось
tryToConnect() // подключаемся заново
}
else {
console.log('Соединение до сих пор активно, повторная попытка не требуется. Статус: ' + socket.readyState)
}
}
Какое оптимальное количество запросов в БД в yii2?46
В общей сложности на один action приходится 40 запросов к БД. Скажите, нормально ли это?
Не много ли для проекта небольшого уровня?
ничего такого глобального из БД не тянетсяа если тянется, то вводим "коэффициент глобального тягания" (КГТ 0.3) . Итого 46*0.3 = 13,8 запроса в БД
public function rules() {
return [
//...
['username', 'unique', 'targetClass' => Users::className(), 'message' => 'Имя пользователя уже занято', 'filter' => ['!=', 'username', $this->oldUsername]],
//...
];
}
<?php
return [
'language' => 'ru-RU',
'sourceLanguage' => 'ru-RU',
'i18n' => [
'translations' => [
'app*'=> [
'class' => 'yii\i18n\PhpMessageSource',
echo \Yii::$app->language;
var_dump(\Yii::$app->i18n);
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'suffix' => '/',
'normalizer' => [
'class' => 'yii\web\UrlNormalizer',
'normalizeTrailingSlash' => true,
'collapseSlashes' => true,
],
// остальные настройки urlManager
]
'suffix' => '/',
$arr2 = array_flip($arr2);
$arrResult = array_intersect_key($arr1, $arr2);
$arrResult = array_intersect_key($arr1, array_flip($arr2));
$food = [
1 => 'яблоко',
2 => 'груша',
3 => 'арбуз',
4 => 'морковка',
5 => 'огуречик',
];
$keys = [4,5];
$filtered = array_filter($food, function($food_key) use ($keys) {
return in_array($food_key, $keys);
}, ARRAY_FILTER_USE_KEY);
array_filter($arr1, fn($n) => in_array($n, $arr2), ARRAY_FILTER_USE_KEY)
array_map(fn($n) => $arr1[$n], $arr2)
class BaseController extends \yii\web\Controller
{
public function beforeAction($action)
{
if (!parent::beforeAction($action)) {
return false;
}
// Тут прописать логику или вызвать отслеживающий сервис
return true;
}
}
class MyController extends BaseController
{
public function actionIndex()
{
.....
"yiisoft/yii2-bootstrap": "~2.0.0",
/**
* {@inheritdoc}
*/
public function actions()
{
return [
'error' => [
'class' => 'yii\web\ErrorAction',
],
];
}
public function run() {
return $this->render('callbackform', [
'model' => new Callback(),
]);
}
<?php
use yii\helpers\Url;
use yii\helpers\Html;
use yii\widgets\ActiveForm;
?>
<div id="callback">
<?php $form = ActiveForm::begin([
'id' => 'callback-form',
'enableAjaxValidation' => true,
'action' => Url::to(['site/callback']),
'validationUrl' => Url::to(['site/callback']),
]); ?>
<?= $form->field($model, 'name')->textInput([
'placeholder' => 'Имя',
])->label(''); ?>
<?= $form->field($model, 'phone')->textInput([
'placeholder' => 'Телефон',
])->label(''); ?>
<?= Html::submitButton('Отправить', ['class' => 'btn btn-primary']) ?>
<?php $form->end(); ?>
</div>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
....
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'suffix'=>'/',
'rules'=>array(
''=>'site/index',
'<action>'=>'site/<action>',
),
],
...
'urlManager'=>array(
'urlFormat'=>'path',
'rules'=>array(
'<action:\w+>'=>'<controller>/<action>',
),
),