Есть таблица, которая хранит в себе адреса городов
id | name | site | address | phone
1 | Город 1 | site-1.ru | Адрес 1 | номер телефона 1
2 | Город 2 | site-2.ru | Адрес 2 | номер телефона 2
Есть несколько доменов, которые стоят на на одной платформе(не имеют свой корневой папки, все домены имеют 1 корневую папку с сайтом)
При заходе на сайт, нужно сделать проверку в бд на каком адресе сейчас находимся и если есть совпадения вывести информация о городе(название, адрес, номер)
Единственное, что пришло в голову, это сделать все через кэш. Как сделал я
В роутах (web.php
)
if(!cache('city_name') || !cache('city_address')) {
$site= $_SERVER['HTTP_HOST'];
$br = \App\City::where('site', $site)->first();
cache(['city_name' => $br->name], 43200);
cache(['city_address' => $br->address], 43200);
}
И в самом шаблоне выводим
{{cache('city_name')}}
Вроде бы все работает, но на сколько это правильный подход, может у Laravel для таких случаев есть свои фишки?
Не тестировал на разный адресах, проект стоит на локалке. Немного погуглив понял, что cache
сохраняется на сервере, а не у клиента. Получается, что на всех адресах будет 1 city_name
, правильно ли я понял?
Если да, то как быть, использовать куки?
Если не правильно указал название, поправьте пожалуйста
У Laravel для этого действительно есть "свои фишки":
namespace App\Http\Middleware;
use Closure;
class AddressMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if(!cache('city_name') || !cache('city_address')) {
$site= $_SERVER['HTTP_HOST'];
$br = \App\City::where('site', $site)->first();
cache(['city_name' => $br->name], 43200);
cache(['city_address' => $br->address], 43200);
}
// здесь User ID поможет Вам кешировать локацию конкретно под пользователя
View::share('city_name', cache('city_name' . $this->auth->user()->id));
return $next($request);
}
}
Но как по мне, шаринг данных во все вьюхи, как описано в документации - такое-себе решение, которое чревато болью в будущем.
Можно немного уменьшить урон от такого подхода, создав middleware и "подключить" его к необходимым роутам. Помните, что можно приатачить middleware к конкретной группе роутов или сделать вот так. Решать Вам.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть магазин на wordpress+woocommerceДля того, чтобы для потенциального покупателя сделать некоторые удобные вещи во время покупки, я запоминаю его...
Как конвертировать array из модели в xml средствами laravel ?
Делаю запрос в БДЗадача стоит следующая: делаю выборку из таблицы A, в которой есть колонки price_min, price_max, weight_min, weight_max