Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Тему можно закрыть, помог тупо ребут сервера
Версия Laravel: 5.6.24
Версия PHP: 7.2.10
Операционная система и её версия: Ubuntu 18.04.1 LTS
Вендор и версия сервера БД: MySQL Ver 14.14 Distrib 5.7.24
Вендор и версия Веб-сервера: Apache 2.4.29
Медод подключения PHP: Apache Module
При заходе на сайт через браузер выдает ошибку Illuminate \ Database \ QueryException "could not find driver"
При этом работают миграции, работает парсер через консоль (который вносит данные в БД).
Проверял БД, все таблицы создаются, данные с парсера сохраняются.
Куда хоть примерно копать?)
Добрый день!
Подскажите, пожалуйста, как правильно организовать генерацию ЧПУ для множества вложенных подкатегорий.
Скажем есть цепочка категорий - /кроссовки/мужские/бренд/что-то-там-еще/(и-сам-товар)
а может быть и короче - /кроссовки/бренд/(сам-товар)
По-моему, писать роутинги для такой каши будет очень проблематично, тем более придется проверять на вложенность каждую категорию, например вдруг "мужские" не относятся к категории "кроссовки".
Как я вижу решение - записывать в базу весь адрес, т.е. `slug` = `/кроссовки/мужские/бренд/`, тогда найти запрашиваемую страницу будет быстро и проверки не нужны.
НО! Возникает проблема, например, если категорию переименовали или привязали к другой категории, получается нужно генерировать всю таблицу адресов заново.
Подскажите, прошу, как можно более-или-менее элегантно решить проблему.
Добрый день!
Подскажите пожалуйста, как можно создать отношение с коллекцией.
Допустим есть модель User данные которой хранятся в таблице users, и есть массив ролей Roles (экземпляр класса Collection).
В таблице users есть поле role_id, т.е. в идеале хотелось бы обращаться к роле через свойство User (User::get()->role),
по сути ведь есть же свойство relations модели Eloquent там как раз хранятся коллекции.
Только написал и до меня дошло
В Collection используется позднее статическое связывание, чтобы моя коллекция заработала нужен костыль типа:
public function __construct($items = null)
{
if ($items !== null)
parent::__construct($items);
}
Может у кого нибудь будет лучше идея, как использовать коллекции, поделитесь плз
Добрый день!
Есть необходимость создать модель из массива, т.е. данные статичны и хранить их в бд бессмысленно.
Но нужны методы поиска, сортировки и т.д. по массиву данных, для этих нужд я обратился к коллекциям.
Есть например мой массив данных MyCollection, я наследую его от Illuminate\Support\Collection
Выглядит это примерно так:
class MyCollection extends Collection
{
$protected $items = [
['id' => 1],
['id' => 2],
];
public function __construct() {}
}
Создаю экземпляр и обращаюсь к методам, но сортировка, отбор и т.д. не работают
Например, это работает:
(new MyCollection)->all();
А это нет:
(new MyCollection)->where('id', 1);
Сломал уже голову, помогите пожалуйста.
Почему то не могу редактировать свое сообщение
Правильно добавить еще проверку на авторизацию, чтобы не дописывать везде отдельно, можно добавить в группу:
protected $middlewareGroups = [
...
'valid_user' => [
'auth',
'confirmed',
'unblocked',
],
];
Решение не идеально в том, что пользователь все таки авторизуется и приходится не забывать добавлять посредника
Неправильно кешировать все записи, в этом нет абсолютно никакого смысла.
Кеш призван снизить нагрузку на сервер, увеличить скорость отдачи.
Но в вашем случае если записей много вы наоборот увеличите нагрузку, т.к. тот же memcached не воздухом питается, а ресурсами сервера.
Кешировать нужно только там где это имеет смысл, например вывод записей на главной странице или в категориях.
Вы же не выводите на экране разом все записи? Скорее всего у вас стоит пагинация, скажем по 10-15 записей.
Есть смысл закешировать первую страницу.
Если пользователи часто заходят дальше первой страницы можно закешировать по ключам типа 'articles_page_$n', в данном случае так же актуально использовать группы, чтобы при добавлении/редактировании статьи не обнулять весь кеш приложения.
То, что отдается пользователю редко - кешировать противопоказано, например результат поиска, фильтров и т.д.
Вообщем решение так и не нашлось, подсмотрел как делают другие.
Решение не идеальное, но рабочее.
Выложу здесь, мало ли кому то пригодится:
App\Http\Kernel.php
protected $middlewareGroups = [
...
'valid_user' => [
'confirmed',
'unblocked',
],
];
protected $routeMiddleware = [
...
'confirmed' => \App\Http\Middleware\CheckConfirmUser::class,
'unblocked' => \App\Http\Middleware\CheckBlockUser::class,
];
App\Http\Middleware\CheckBlockUser.php
public function handle($request, Closure $next)
{
$user = Auth::user();
if ($user && $user->blocked_at !== null)
return redirect()->route('blocked');
return $next($request);
}
App\Http\Middleware\CheckConfirmUser.php
public function handle($request, Closure $next)
{
if (config('settings.email_confirmation'))
{
$user = Auth::user();
if ($user && $user->confirmed_at === null)
return redirect()->route('confirmation')->with(['id' => $user->id]);
}
return $next($request);
}
routes\web.php
Route::group(['middleware' => ['valid_user']], function () {
...
});
Насколько я знаю, для Laravel есть расширения, которые реализуют виджеты.
И да, есть решение из коробки - ViewComposer, вы можете в нем сформировать ваш код или чистую логику.
Добрый день, уважаемые форумчане!
Прошу вашей помощи в освоении Лары.
1) Версия Laravel - 5.6.18
2) Версия php 7.2
Пытаюсь сделать активацию пользователей, смысл в том чтобы при попытке логина выбрасывалась страница, что пользователь не активирован.
Пробую сделать через слушатель события Login, код выглядит так:
EventServiceProvider:
protected $listen = [
'Illuminate\Auth\Events\Login' => [
'App\Listeners\CheckConfirmUser',
'App\Listeners\UpdateLastLogin',
],
];
CheckConfirmUser:
public function handle(Login $event)
{
/* @var $user \App\Models\User */
$user = $event->user;
if ($user->confirmed_at === null)
return redirect()->route('activation')->with(['id' => $user->id]);
}
Проблема в том, что слушатель срабатывает, но не сбрасывает авторизацию, т.е. return не вызывает остановку выполнения кода, либо событие происходит уже после авторизации.
Страницы 1