updateCounters() делает +2

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
killer67
Сообщения: 13
Зарегистрирован: 2018.11.14, 14:41

updateCounters() делает +2

Сообщение killer67 »

Здравствуйте, недавно начал изучать фреймворк, начал с написания нвостей, и узнал про "updateCounters()", попробовал применить на сайте получилось что в место +1 к просмотрам он делает +2..

Вот код просмотра статьи в контроллере:

Код: Выделить всё

    public function actionView(){
		$id = Yii::$app->request->get('id');
		$news = News::FindOne($id);
//		$news->updateCounters(['viewers' => 1]);
		return $this->render('view', compact('news'));
	}
Вот часть вьювера где добавляется 1 к просмотрам:

Код: Выделить всё

<?php
	use yii\i18n\Formatter;
	use yii\helpers\Html;
	use yii\helpers\Url;

	$this->title = 'Новости :: western-soft.com';
	if ($news->catNews === NULL){ $category = 'Не установлена'; } else { $category = $news->catNews; }
	$news->updateCounters(['viewers' => 1]); // Должно добавить 1, но добавляет 2
?>
При этом смотрю в отладчике, запрос:
21:05:45.831 1.4 ms UPDATE 1
UPDATE `news` SET `viewers`=`viewers`+-1 WHERE `id`=1

Проходит только 1 раз, не могу понять где еще происходит +1.

PS, При чем это точно эта строка, так как если изменить 1 на 5, то добавляется 10.
someweb
Сообщения: 552
Зарегистрирован: 2017.03.09, 10:12

Re: updateCounters() делает +2

Сообщение someweb »

Скорее всего страница запрашивается два раза, смотрите редиректы.
Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа. Роберт Шекли.
killer67
Сообщения: 13
Зарегистрирован: 2018.11.14, 14:41

Re: updateCounters() делает +2

Сообщение killer67 »

Вот только где их искать, тут получается используется:

1. Модель (получающая все данные для просмотра полной версии статьи)
2. Контроллер (экшн контроллера приведен выше)
3. Вид, (только отображение переданных объектов в форматировании)

Сейчас проверил с помощью:

Код: Выделить всё

file_put_contents('./test.log', "\r".'ТЕст', FILE_APPEND);
По отдельности внес в экшн, модель и вид, все вызываются по 2 раза.

Проверил по $_SERVER[REDIRECT_STATUS]
оба раза 200.

PS. Забавное наблюдение:
Сделл простейшую логописалку:

Код: Выделить всё

file_put_contents('./test.log', '---------------------------------[ Начало записи ]---------------------------------'."\r", FILE_APPEND);
foreach($_SERVER as $k => $v){
	
	file_put_contents('./test.log', $k . ' => ' . $v . "\r", FILE_APPEND);
	
}
file_put_contents('./test.log', '---------------------------------[ Конец записи ]---------------------------------'."\r", FILE_APPEND);
просто обновляю страницу с полным текстом новости, по адресу: server/news/view/4
Записи в логах разные. Выложу отличия первого от второго:
1. HTTP_ACCEPT => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
2. HTTP_ACCEPT => text/html, */*; q=0.01

1. HTTP_REFERER => http://server/
2. HTTP_REFERER => http://server/news/view/4

1. REMOTE_PORT => 21170
2. REMOTE_PORT => 26289

Больше всего смутил выделенный фрагмент..
LLIyTNiK
Сообщения: 1
Зарегистрирован: 2019.05.26, 23:04

Re: updateCounters() делает +2

Сообщение LLIyTNiK »

Скорее всего у вас включена дебаг панель, именно для её отрисовки делается второй запрос.
killer67
Сообщения: 13
Зарегистрирован: 2018.11.14, 14:41

Re: updateCounters() делает +2

Сообщение killer67 »

Есть какой то способ осечь второй запрос? В месте с ним возможно что то еще долдно идти, какой то признак..
Usick
Сообщения: 42
Зарегистрирован: 2017.04.11, 12:07

Re: updateCounters() делает +2

Сообщение Usick »

Я бы посоветовал для начала убедиться что именно в дебаг панели причина двойного срабатывания, поскольку у меня с включенной панелью updateCounters() отрабатывает только один раз.
Ответить