Files
2025-09-20 16:47:41 +03:00

58 lines
1.4 KiB
PHP

<?php
namespace App\Http\Middleware;
use App\Services\GoatCounterService;
use Closure;
use Illuminate\Http\Request;
class GoatCounterMiddleware
{
protected GoatCounterService $goatCounter;
public function __construct(GoatCounterService $goatCounter)
{
$this->goatCounter = $goatCounter;
}
/**
* Handle an incoming request.
*/
public function handle(Request $request, Closure $next)
{
$response = $next($request);
// Only track "real" HTML page requests:
if (
$request->isMethod('GET') &&
!$request->ajax() &&
$this->isTrackable($request)
) {
$this->goatCounter->trackPageview(
'/' . ltrim($request->path(), '/'),
$request->route()?->getName() ?? ucfirst(str_replace('/', ' ', $request->path())),
$request->headers->get('referer')
);
}
return $response;
}
protected function isTrackable(Request $request): bool
{
$path = $request->path();
// Ignore file extensions (css, js, images, fonts, etc.)
if (preg_match('/\.(css|js|png|jpe?g|gif|svg|ico|woff2?|ttf|map)$/i', $path)) {
return false;
}
// Optionally skip API routes
if ($request->is('api/*')) {
return false;
}
return true;
}
}