Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Пока писал вопрос, сработал метод резинового утенка, так, что извините))
Это middleware. Смотри App\Http\Kernel. Первый разрешает 60 запросов в 1 минуту для одного IP-шника. Второй работает с параметрами роутера.
Я хочу создать маршрут для отдачи баннеров, если оставлять данный роут в web.php то для каждого запроса создается ссесия в redis, я хотел от этого избавиться.
где подробнее можно почитать, что каждый из них делает?
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
];
Оставил пока так
'api' => [
'bindings',
],
И я правильно понимаю, что сейчас не будет никаких ограничений на запросы + ссесия в redis не создается?
и я правильно понимаю, что разместив такой маршрут
Route::Group(['domain' => 'cdn.test.net'], function(){
Route::get('/tags.js', 'CDNController@index')->name('showTags');
});
в api.php роутов, ссесии и куки для этого маршрута создаваться не будут?
Route::middleware('auth:api')->get('/user', function (Request $request) {
return $request->user();
});
по примеру пробовал и было с ошибкой, но сделал как было в web.php
Route::Group(['domain' => 'cdn.test.net'], function(){
Route::get('/tags.js', 'CDNController@index')->name('showTags');
});
и заработало
и еще вопрос
/**
* The application's route middleware groups.
*
* @var array
*/
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
'throttle:60,1',
'bindings',
],
];
где прочитать про эту часть
'api' => [
'throttle:60,1',
'bindings',
],
что за параметры задаются
Как для определенного роута (маршрута) или контроллера отключить полностью ссесию?
Или как создать маршруты в апи файле роутов? у меня всегда 404 ошибку выдает
Доброго утра всем)
При авторизации некоторым пользователям при вводе верных данных выдает, что они ошиблись в наборе емейла или пароля. Вот я думаю не может ли это быть связано с тем, что в бд под юзером сохранился 1 такен, а когда он входит через опеределенное время то генерится новый токен и его попросту не пускает в кабинет? Или токен тут не причем?
Ставил дефолтую версию ларавел 5.5, все так же, вопрос чего тогда в документации прописано, что он есть?!
Всем привет,суть вопроса в том, что редис принимает время жизни кеша либо минутами либо объектом даты карбона.
У меня на сервере стоит тайм зона Нью Йорка.
Я создаю нужную мне дату через карбон Carbon::now()->timestamp(strtotime('tomorrow')) и данные кладутся в редис.
Я могу создать дату так же Carbon::now('America/New_York')->timestamp(strtotime('tomorrow')) с указанием времени сервера, но когда я смотрю что он мне выводит, то там дата выходит не например 24 сентября 00.00, а 23 и время около 8 вечера, я не пойму он считает относительно гринвича? И в редис передает этой датой? тогда вопрос куда смотрит редис? на время что настроено на сервере? или тоже относительно гринвича?
Очень боюсь ситуации, что карбон создаст вот такую дату (если я правильно понял относительно гринвича и положит ее в редис, а редис будет думать что это локальное время (относительно Нью Йорка) и тогда выйдет каша с моими счетчиками которые должны обнулятся в конце дня. Подскажите как лучше сделать?
Добавлял и в селект эти поля, но все равно ошибка!
$Analytics = Analytics::where('ip', $data)->groupBy('user_id')->orderby('date', 'desc')->get();
Делаю вот так, что бы сгруппировать по ип и вывести уникальные, но постгря ругается, если добавить дайт в груп бай то желаемый смысл теряется, знаю что можно сделать так
$Analytics = Analytics::where('ip', $data)->orderby('date', 'desc')->get()->unique('user_id');
но вопрос как работать с груп бай в постгрее если хочу уникальные значения?
[2017-09-17 16:50:53] local.ERROR: The address 185.213.209.55 is not in the database. {"exception":"[object] (GeoIp2\\Exception\\AddressNotFoundException(code: 0): The address 185.213.209.55 is not in the database. at /var/www/www-data/.../vendor/geoip2/geoip2/src/Database/Reader.php:244)
[stacktrace]
#0 /var/www/www-data/.../vendor/geoip2/geoip2/src/Database/Reader.php(215): GeoIp2\\Database\\Reader->getRecord('City', 'City', '185.213.209.55')
#1 /var/www/www-data/.../vendor/geoip2/geoip2/src/Database/Reader.php(71): GeoIp2\\Database\\Reader->modelFor('City', 'City', '185.213.209.55')
#2 /var/www/www-data/.../app/Http/Controllers/CDNController.php(28): GeoIp2\\Database\\Reader->city('185.213.209.55')
#3 [internal function]: App\\Http\\Controllers\\CDNController->index(Object(Illuminate\\Http\\Request))
#4 /var/www/www-data/.../vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): call_user_func_array(Array, Array)
#5 /var/www/www-data/.../vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45): Illuminate\\Routing\\Controller->callAction('index', Array)
Вы про эти? похоже из-за того, что базы старые он не может найти ип и ругается все приложение...
Стоит дебажный лог в ларавеле и вот при большом объеме трафа стало сыпать такие строки
#42 .../vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#43 .../vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#44 .../vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#45 .../vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#46 .../vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php(46): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
К чему это? и что с этим делать?
Ну так в доп поле к каждому юзеру например test может лежать массив где ключ это дата, а значение - заработок.
Я бы сделал через Constraining Eager Loads
https://laravel.com/docs/5.5/eloquent-relationships
$users = App\User::with(['posts' => function ($query) {
$query->where('title', 'like', '%first%');
}])->get();
И ты на выходе получишь группу объектов юзеров с доп полем заработок и конкретно суммой для каждого....
Правда пришлось переделать время жизни
$expire = Carbon::now()->timestamp(strtotime('tomorrow'));
$imps_by_ip = Cache::remember($visitor_ip.$TagsGroup->id, $expire, function () {return 0;});
$imps = Cache::remember('g_'.$TagsGroup->id, $expire, function () {return 0;});
Вот так? т.е забираю значение из кеша если его нет то вернуть 0
и второе значение время жизни так?
мне нужно устанавливать счетчик на нужное мне время которое вычисляется выше....
а ниже у меня
if($TagsGroup->impressions_limit_ip > $imps_by_ip){
$imps_by_ip = Cache::increment($visitor_ip.$TagsGroup->id);
}
if($TagsGroup->impressions_limit > $imps){
$imps = Cache::increment('g_'.$TagsGroup->id);
}
Только я не понял, ремембер закеширует мне значение 0 на это время что укажу? не нашел просто
https://laravel.com/docs/5.5/cache#cache-usage
и значение которое потом увеличивается так же будет жить тот же промежуток времени который был указан в ремембер?!
НУ у меня по логика так, или как тогда сделать
напрмер часть условия идет и если еще не создан такой ключ то только тогда создать его в кеше...
а ниже нужно проверять опять же значение, пока условие выполняется до тех пор и нужно увеличивать значение
Да так работает, но в компосере пришлось оставить "predis/predis": "^1.1", иначе ругался ларавел...
Мне нужно создавать ключ на сутки и постоянно делать инкремент если было обращение.
И я так понимаю я могу удалить "predis/predis": "^1.1", из компосера?
И просто сделать в контроллере
Cache::store('redis');
Затем
if(... && !Cache::has('key')){
Cache::put('key', 'value', $expiresAt);
}
и еще ниже
if(...){
$tmp = Cache::increment('key');
}
Я правильно понял смысл работы с кешем?
хм интересно..я правильно понял, что нужно сперва
$redis= Cache::store('redis'); сделать некий конекшенс
а потом я уже могу плясать как хочу?
ну проверять значения, вытаскивать и тп
пс нашел
https://laravel.com/docs/5.5/redis#configuration у них в примере тоже указано
use Illuminate\Support\Facades\Redis;
и еще один вопрос: есть ли разница в использовании?
Cache с драйвером redis тебе не подходит?
немного не понял если честно...
делал и так
php artisan clear-compiled; php artisan auth:clear-resets; php artisan cache:clear; php artisan config:clear; php artisan debugbar:clear; php artisan route:clear; php artisan view:clear; php artisan optimize
но ничего не выходит
https://laravel.com/docs/5.5/collection … -intersect
Использовал версию 5.4 все ок
обновился до 5.5 стало ругаться что таокго метода нет, решил обновить руками с 5.4 до 5.5 (извращенным методом) но все так же была ошибка не знаю метод intersect.
Благо есть похожий, заменил на only()
Но все равно может кто-то сталкивался с этим?!
use Redis;
$redis = Redis::connection();
получаю
Call to undefined method Redis::connection()
но если указать
use Illuminate\Support\Facades\Redis;
то все работает, и самое интересное в алиасах
'Redis' => Illuminate\Support\Facades\Redis::class,
есть такая запись.
в чем логика?
Послушал Ваш совет и установил
CACHE_DRIVER=redis
SESSION_DRIVER=redis
Я могу в редис закинуть это, но стоит ли? ссессии вообще не где эти не используются, они создаются при запросе жс срипта, в сутки около 7млн запросов