I have created a middleware which checks each url and saves accessing logs data in database. Everything went fine but each time an url is loaded in the browser, the data is saved twice in the db. I am using laravel 8 and this project will be used for buying coupon from the shops by the users.
App\Http\Middleware\AccessLog.php
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use App\Models\LogRecord;
use Auth;
class AccessLog
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle(Request $request, Closure $next)
{
if(strpos($request->path(), 'shop') !== false){
$data['type'] = 'shop';// 'shop' or 'coupon' and for other type 'page' )
$data['content'] = $request->route('id');//content -> shop.id or coupon.id. and other page is route path
}
elseif(strpos($request->path(), 'coupon') !== false){
$data['type'] = 'coupon';
$data['content'] = $request->route('id');
}
else{
$data['type'] = 'page';
$url_components = parse_url($request->path());
$path = explode('/',$url_components['path']);
$data['content'] = $path[0];
}
$user = null;
if (Auth::check()){
$user = Auth::user()->id;
}
$data['user_id'] = $user;
$data['servicer_id'] = config('const.common.accesslog.servicer_id');
$accesslog = LogRecord::create($data);
return $next($request);
}
}
App\Http\Kernel.php
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'log' => \App\Http\Middleware\AccessLog::class,
];
App\Models\LogRecord.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class LogRecord extends Model
{
use HasFactory;
protected $table = 'access_logs';
protected $fillable =['user_id','servicer_id','type','content'];
}
database: access_logs table
Each time the record is saved twice. What may be the problem?
Thank you https://stackoverflow.com/users/16174785/nitrin0 I got to know from nitrin0 that sometimes the plugin/extension may affect. So I tried disabling my each extension one by one. It worked after I disabled the following extension HTML 标签检测器|HTML TAG CHECKER from my google chrome browser. Quite unexpected!! extension