Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 Laravel 5.x » Laravel + React » 20.03.2018 01:47:35

adams
Ответов: 1

Пока писал вопрос, сработал метод резинового утенка, так, что извините))

#2 Re: Laravel 5.x » Сессии » 02.03.2018 22:22:21

Это 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 не создается?

#3 Re: Laravel 5.x » Сессии » 26.02.2018 23:47:02

и я правильно понимаю, что разместив такой маршрут

Route::Group(['domain' => 'cdn.test.net'], function(){
	Route::get('/tags.js', 'CDNController@index')->name('showTags');
});

в api.php роутов, ссесии и куки для этого маршрута создаваться не будут?

#4 Re: Laravel 5.x » Сессии » 26.02.2018 23:39:55

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',
        ],

что за параметры задаются

#5 Laravel 5.x » Сессии » 26.02.2018 23:10:24

adams
Ответов: 8

Как для определенного роута (маршрута) или контроллера отключить полностью ссесию?
Или как создать маршруты в апи файле роутов? у меня всегда 404 ошибку выдает

#6 Laravel 5.x » Ошибка при авторизации и токен » 24.02.2018 05:35:15

adams
Ответов: 1

Доброго утра всем)
При авторизации некоторым пользователям при вводе верных данных выдает, что они ошиблись в наборе емейла или пароля. Вот я думаю не может ли это быть связано с тем, что в бд под юзером сохранился 1 такен, а когда он входит через опеределенное время то генерится новый токен и его попросту не пускает в кабинет? Или токен тут не причем?

#7 Re: Laravel 5.x » Нет метода intersect » 23.09.2017 14:28:06

Ставил дефолтую версию ларавел 5.5, все так же, вопрос чего тогда в документации прописано, что он есть?!

#8 Laravel 5.x » TimeZone Carbon/Redis » 23.09.2017 14:25:38

adams
Ответов: 0

Всем привет,суть вопроса в том, что редис принимает время жизни кеша либо минутами либо объектом даты карбона.
У меня на сервере стоит тайм зона Нью Йорка.
Я создаю нужную мне дату через карбон Carbon::now()->timestamp(strtotime('tomorrow')) и данные кладутся в редис.
Я могу создать дату так же Carbon::now('America/New_York')->timestamp(strtotime('tomorrow')) с указанием времени сервера, но когда я смотрю что он мне выводит, то там дата выходит не например 24 сентября 00.00, а 23 и время около 8 вечера, я не пойму он считает относительно гринвича? И в редис передает этой датой? тогда вопрос куда смотрит редис? на время что настроено на сервере? или тоже относительно гринвича?
Очень боюсь ситуации, что карбон создаст вот такую дату (если я правильно понял относительно гринвича и положит ее в редис, а редис будет думать что это локальное время (относительно Нью Йорка) и тогда выйдет каша с моими счетчиками которые должны обнулятся в конце дня. Подскажите как лучше сделать?

#9 Re: Laravel 5.x » Гроуп бай и постгрии » 22.09.2017 11:49:35

Добавлял и в селект эти поля, но все равно ошибка!

#10 Laravel 5.x » Гроуп бай и постгрии » 22.09.2017 09:51:51

adams
Ответов: 2

$Analytics = Analytics::where('ip', $data)->groupBy('user_id')->orderby('date', 'desc')->get();

Делаю вот так, что бы сгруппировать по ип и вывести уникальные, но постгря ругается, если добавить дайт в груп бай  то желаемый смысл теряется, знаю что можно сделать так

$Analytics = Analytics::where('ip', $data)->orderby('date', 'desc')->get()->unique('user_id');

но вопрос как работать с груп бай в постгрее если хочу уникальные значения?

#11 Re: Laravel 5.x » Лог ларавел » 18.09.2017 10:04:03

[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)

Вы про эти? похоже из-за того, что базы старые он не может найти ип и ругается все приложение...

#12 Laravel 5.x » Лог ларавел » 16.09.2017 23:40:03

adams
Ответов: 3

Стоит дебажный лог в ларавеле и вот при большом объеме трафа стало сыпать такие строки

#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))

К чему это? и что с этим делать?

#13 Re: Laravel 5.x » Запрос к отношению » 14.09.2017 17:28:52

Ну так в доп поле к каждому юзеру например test может лежать массив где ключ это дата, а значение - заработок.

#14 Re: Laravel 5.x » Запрос к отношению » 14.09.2017 16:31:04

Я бы сделал через Constraining Eager Loads
https://laravel.com/docs/5.5/eloquent-relationships

$users = App\User::with(['posts' => function ($query) {
    $query->where('title', 'like', '%first%');
}])->get();

И ты на выходе получишь группу объектов юзеров с доп полем заработок и конкретно суммой для каждого....

#15 Re: Laravel 5.x » Вопрос про редис и ларавел » 14.09.2017 15:18:29

Правда пришлось переделать время жизни

$expire = Carbon::now()->timestamp(strtotime('tomorrow'));

#16 Re: Laravel 5.x » Вопрос про редис и ларавел » 14.09.2017 13:56:05

$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
и значение которое потом увеличивается так же будет жить тот же промежуток времени который был указан в ремембер?!

#17 Re: Laravel 5.x » Вопрос про редис и ларавел » 14.09.2017 13:47:58

НУ у меня по логика так, или как тогда сделать

напрмер часть условия идет и если еще не создан такой ключ то только тогда создать его в кеше...

а ниже нужно проверять опять же значение, пока условие выполняется до тех пор и нужно увеличивать значение

#18 Re: Laravel 5.x » Вопрос про редис и ларавел » 14.09.2017 13:45:37

Да так работает, но в компосере пришлось оставить "predis/predis": "^1.1", иначе ругался ларавел...

#19 Re: Laravel 5.x » Вопрос про редис и ларавел » 14.09.2017 13:15:12

Мне нужно создавать ключ на сутки и постоянно делать инкремент если было обращение.
И я так понимаю я могу удалить "predis/predis": "^1.1", из компосера?
И просто сделать в контроллере

Cache::store('redis');

Затем

if(... && !Cache::has('key')){
  Cache::put('key', 'value', $expiresAt);
}

и еще ниже

if(...){
  $tmp = Cache::increment('key');
}

Я правильно понял смысл работы с кешем?

#20 Re: Laravel 5.x » Вопрос про редис и ларавел » 14.09.2017 01:38:32

хм интересно..я правильно понял, что нужно сперва

$redis= Cache::store('redis'); сделать некий конекшенс

а потом я уже могу плясать как хочу?
ну проверять значения, вытаскивать и тп

пс нашел

https://laravel.com/docs/5.5/redis#configuration у них в примере тоже указано

use Illuminate\Support\Facades\Redis;

и еще один вопрос: есть ли разница в использовании?

#21 Re: Laravel 5.x » Вопрос про редис и ларавел » 13.09.2017 21:32:45

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

но ничего не выходит

#22 Laravel 5.x » Нет метода intersect » 13.09.2017 15:02:35

adams
Ответов: 1

https://laravel.com/docs/5.5/collection … -intersect

Использовал версию 5.4 все ок
обновился до 5.5 стало ругаться что таокго метода нет, решил обновить руками с 5.4 до 5.5 (извращенным методом) но все так же была ошибка не знаю метод intersect.

Благо есть похожий, заменил на only()

Но все равно может кто-то сталкивался с этим?!

#23 Laravel 5.x » Вопрос про редис и ларавел » 13.09.2017 13:17:31

adams
Ответов: 13

use Redis;
$redis = Redis::connection();

получаю

Call to undefined method Redis::connection()

но если указать
use Illuminate\Support\Facades\Redis;

то все работает, и самое интересное в алиасах

'Redis' => Illuminate\Support\Facades\Redis::class,

есть такая запись.

в чем логика?

#24 Re: Laravel 5.x » Сессии на поддоменах » 12.09.2017 15:27:49

Послушал Ваш совет и установил

CACHE_DRIVER=redis
SESSION_DRIVER=redis

#25 Re: Laravel 5.x » Сессии на поддоменах » 12.09.2017 14:29:28

Я могу в редис закинуть это, но стоит ли? ссессии вообще не где эти не используются, они создаются при запросе жс срипта, в сутки около 7млн запросов

Подвал раздела