Laravel по-русски

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

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

#1 Re: Laravel 5.x » Помогите, не подключается к БД » 13.11.2018 21:38:28

Тему можно закрыть, помог тупо ребут сервера smile

#2 Laravel 5.x » Помогите, не подключается к БД » 13.11.2018 21:26:33

Hardoff
Ответов: 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"
При этом работают миграции, работает парсер через консоль (который вносит данные в БД).
Проверял БД, все таблицы создаются, данные с парсера сохраняются.

Куда хоть примерно копать?)

#3 Laravel 5.x » Генерация ЧПУ » 27.08.2018 13:29:07

Hardoff
Ответов: 1

Добрый день!

Подскажите, пожалуйста, как правильно организовать генерацию ЧПУ для множества вложенных подкатегорий.
Скажем есть цепочка категорий - /кроссовки/мужские/бренд/что-то-там-еще/(и-сам-товар)
а может быть и короче -         /кроссовки/бренд/(сам-товар)

По-моему, писать роутинги для такой каши будет очень проблематично, тем более придется проверять на вложенность каждую категорию, например вдруг "мужские" не относятся к категории "кроссовки".

Как я вижу решение - записывать в базу весь адрес, т.е. `slug` = `/кроссовки/мужские/бренд/`, тогда найти запрашиваемую страницу будет быстро и проверки не нужны.
НО! Возникает проблема, например, если категорию переименовали или привязали к другой категории, получается нужно генерировать всю таблицу адресов заново.
Подскажите, прошу, как можно более-или-менее элегантно решить проблему.

#4 Laravel 5.x » Отношения и коллекции » 04.07.2018 09:54:32

Hardoff
Ответов: 0

Добрый день!

Подскажите пожалуйста, как можно создать отношение с коллекцией.
Допустим есть модель User данные которой хранятся в таблице users, и есть массив ролей Roles (экземпляр класса Collection).
В таблице users есть поле role_id, т.е. в идеале хотелось бы обращаться к роле через свойство User (User::get()->role),
по сути ведь есть же свойство relations модели Eloquent там как раз хранятся коллекции.

#5 Re: Laravel 5.x » Наследование коллекций » 02.05.2018 15:02:56

Только написал и до меня дошло smile
В Collection используется позднее статическое связывание, чтобы моя коллекция заработала нужен костыль типа:

    public function __construct($items = null)
    {
        if ($items !== null)
            parent::__construct($items);
    }

Может у кого нибудь будет лучше идея, как использовать коллекции, поделитесь плз

#6 Laravel 5.x » Наследование коллекций » 02.05.2018 14:37:57

Hardoff
Ответов: 1

Добрый день!

Есть необходимость создать модель из массива, т.е. данные статичны и хранить их в бд бессмысленно.
Но нужны методы поиска, сортировки и т.д. по массиву данных, для этих нужд я обратился к коллекциям.

Есть например мой массив данных 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);

Сломал уже голову, помогите пожалуйста.

#7 Re: Laravel 5.x » Нужна помощь по Auth::login() » 27.04.2018 17:58:56

Почему то не могу редактировать свое сообщение smile
Правильно добавить еще проверку на авторизацию, чтобы не дописывать везде отдельно, можно добавить в группу:

protected $middlewareGroups = [
         ...
        'valid_user' => [
            'auth',
            'confirmed',
            'unblocked',
        ],
];

Решение не идеально в том, что пользователь все таки авторизуется и приходится не забывать добавлять посредника smile

#8 Re: Laravel 5.x » Работа с кешем » 27.04.2018 17:48:38

Неправильно кешировать все записи, в этом нет абсолютно никакого смысла.

Кеш призван снизить нагрузку на сервер, увеличить скорость отдачи.
Но в вашем случае если записей много вы наоборот увеличите нагрузку, т.к. тот же memcached не воздухом питается, а ресурсами сервера.

Кешировать нужно только там где это имеет смысл, например вывод записей на главной странице или в категориях.
Вы же не выводите на экране разом все записи? Скорее всего у вас стоит пагинация, скажем по 10-15 записей.
Есть смысл закешировать первую страницу.

Если пользователи часто заходят дальше первой страницы можно закешировать по ключам типа 'articles_page_$n', в данном случае так же актуально использовать группы, чтобы при добавлении/редактировании статьи не обнулять весь кеш приложения.

То, что отдается пользователю редко - кешировать противопоказано, например результат поиска, фильтров и т.д.

#9 Re: Laravel 5.x » Нужна помощь по Auth::login() » 27.04.2018 12:58:09

Вообщем решение так и не нашлось, подсмотрел как делают другие.
Решение не идеальное, но рабочее.
Выложу здесь, мало ли кому то пригодится:

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 () {
     ...
});

#10 Re: Laravel 5.x » Стоит ли переходить с Yii2? » 27.04.2018 11:26:08

Насколько я знаю, для Laravel есть расширения, которые реализуют виджеты.
И да, есть решение из коробки - ViewComposer, вы можете в нем сформировать ваш код или чистую логику.

#11 Laravel 5.x » Нужна помощь по Auth::login() » 27.04.2018 11:19:28

Hardoff
Ответов: 3

Добрый день, уважаемые форумчане!
Прошу вашей помощи в освоении Лары.
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 не вызывает остановку выполнения кода, либо событие происходит уже после авторизации.

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