$this->geoIp->getDetectedCountry()
namespace App\Http\Middleware;
use App\Services\GeoIp;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
use Mcamara\LaravelLocalization\Facades\LaravelLocalization;
class DetectCountry
{
/** @var \App\Services\GeoIp */
private GeoIp $geoIp;
public function __construct(GeoIp $geoIp)
{
$this->geoIp = $geoIp;
}
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle(Request $request, Closure $next)
{
// Do not use for the admin panel
if (Str::startsWith(\Route::currentRouteName(), 'platform.')) return $next($request);
if (!session()->has(SK_USER_COUNTRY)) {
$country = \Auth::check() && \Auth::user()->location_country
? \Auth::user()->location_country
: $this->geoIp->getDetectedCountry();
session()->put(SK_USER_COUNTRY, $country);
return redirect(LaravelLocalization::localizeURL($request->getRequestUri(), $country->locale));
}
return $next($request);
}
}
Но ведь $locale будет всегда установлена
$locale = session()->get('locale')
$locale = session()->get('locale');
if (!$locale) // в сессии локаль не сохранена
$locale = Location::get($ip)?->countryCode ?? config('app.fallback_locale');
session()->put('locale', $locale);
}
app()->setLocale($locale);
return $next($request);
::get()
возвращает null
если не смог определить страну.$locale = session()->get('locale')
?? Location::get($ip)?->countryCode
?? config('app.fallback_locale');
session()->put('locale', $locale);
app()->setLocale($locale);
return $next($request);
$locale = session()->get('locale');
if (!$locale) // в сессии локаль не сохранена
if ($currentUserCountry = Location::get($ip)) {
$locale = $currentUserCountry->countryCode; // ru или en или fr и т.д.
} else {
$locale = config('app.fallback_locale');
}
session()->put('locale', $locale);
}
app()->setLocale($locale);
return $next($request);
$locale = session()->get('locale');
if (!$locale) // в сессии локаль не сохранена
$currentUserCountry = Location::get($ip);
$locale = $currentUserCountry->countryCode; // ru или en или fr и т.д.
session()->put('locale', $locale);
}
app()->setLocale($locale);
return $next($request);
foreach($массив as $ключ_массива => $элемент_массива) {
}
foreach($массив as $элемент_массива) {
}
foreach($arr as $years) {
foreach($years as $year) {
}
}
function xo($input) {
if(is_array($input)) {
foreach($input as $item) {
xo($item);
}
} else {
echo $input;
}
}
if(is_array($array)) { // Если массив
// Здесь будет только массив
else { // Иначе
// Здесь НЕ может быть массива
// потому что это противоположность is_array
}
Task function must be specified
.s > span { font-size: 0.8em; }
Думаю, стоит начать с этого – Перенести проект с рабочего стола в отдельную папку, названную латинскими символами, в корне диска.
Что за дичь вообще, размещать проекты на рабочем столе?