Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Версия Laravel: 5.5
Версия PHP: 7.2
Операционная система и её версия: win 7 x64
Вендор и версия сервера БД: MySql 5.7
Вендор и версия Веб-сервера: Apache-PHP-7-x64
Медод подключения PHP: OpenServe (всё включено)
Задача:
Написал класс, который записывает в БД запись (1 строка), а именно данные посетителя (User-agent, Referer и тому подобное).
Что бы не прописывать каждый раз в каждом контроллере запуск этого класса, сделал следующим образом:
class Kernel: в 'web' => [
\App\Http\Middleware\LogIdentification::class // Запуск этого моего класса
]
И в директории Middleware вставил этот LogIdentification.
Содержимое LogIdentification:
namespace App\Http\Middleware;
use Closure;
use Illuminate\Cookie\Middleware\EncryptCookies as Middleware;
use Illuminate\Support\Facades\Auth;
class Allximik extends Middleware
public function handle($request, Closure $next)
{
$this->saveMrLogIdent();
return $next($request);
}
public function saveMrLogIdent()
{
//код вставки новой записи в БД
}
Что произошло, текст ошибки, если есть:
В БД вставляется 2 строки. такое ощущение, будто класс два раза вызывается (типа если бы страница сама перезагрузилась), причём в $_SERVER['HTTP_REFERER'] разные значения. Визуально страница не перезагружается, то есть вызов класса происходит где-то в глубине Laravel.
Интересное наблюдение:
Если в методе saveMrLogIdent() дописать dump('что угодно'), то запись вставляется только одна.
Лог Apache говорит следующее:
payment: 127.0.0.1 [23/Nov/2018:12:12:49 +0300] "GET / HTTP/1.1" 200 21952 "http://payment/stoks" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36"
payment: 127.0.0.1 [23/Nov/2018:12:12:50 +0300] "GET / HTTP/1.1" 200 21952 "http://payment/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36"
Куда копать? Можно-ли как-нибудь вывести лог всех процессов laravel-я, что найти причину дублирования записи в таблице?
Изменено Allximik (23.11.2018 12:14:29)
Не в сети
Разобрался, тему можно закрывать.
Причиной всему была вот эта строка
<link rel="shortcut icon" href="#"/>
После загрузки страницы, она снова делала запрос на сервер, где как и полагается, честно выполнялись все действия
Не в сети
Страницы 1