Как создать helper в Laravel

Ромчик
0

дфкфмудДоброго времени суток. В одном из проектов мне нужно было реализовать авторизацию для пользователей, имеющих доступ к админке и пользователей, имеющих доступ в кабинет из разных таблиц. Как это сделать я описал в статье «Авторизация в Laravel 5.3 из нескольких таблиц». Этот способ подходит и для Laravel 5.4. Затем мне понадобилось реализовать проверку пользователя on-line. Это я описал в статье «Как проверить, что пользователь on-line в Laravel». И возник вопрос, как упростить про саму проверку в сети пользователь или нет. Было решено написать helper, который и будет решать данный вопрос.

Что такое helper в Laravel вы можете прочитать в официальной документации, а также познакомиться со стандартными helper.

И так, как вы помните из статьи «Как проверить, что пользователь on-line в Laravel» мы использовали middleware UserActivity, который помечает, что пользователь находится в сети.


<?php
    namespace App\Http\Middleware;
    use Closure;
    use Carbon\Carbon;
    use Auth;
    use Cache;

    class UserActivity
    {
        /**
        * Handle an incoming request.
        *
        * @param \Illuminate\Http\Request $request
        * @param \Closure $next
        * @return mixed
        */
        public function handle($request, Closure $next)
        {
            if(Auth::check()) {
                $expiresAt = Carbon::now()->addMinutes(5);
                Cache::put('user-is-online-' . Auth::user()->id, true, $expiresAt);
            }
            return $next($request);
        }

В моем случае данный middleware  был изменен:


<?php
    namespace App\Http\Middleware;
    use Closure;
    use Carbon\Carbon;
    use Auth;
    use Cache;

    class UserActivity
    {
        /**
        * Учет on-line пользователей
        *
        * @param \Illuminate\Http\Request&nbsp; $request
        * @param \Closure $next
        * @return mixed
        */
        public function handle($request, Closure $next)
        {
            $expiresAt = Carbon::now()->addMinutes(5);
            if(Auth::guard('admin')->check()) { 
                Cache::put('admin-is-online-' . Auth::guard('admin')->user()->id, true, $expiresAt);
            } 
            if(Auth::check()) { 
                Cache::put('user-is-online-' . Auth::user()->id, true, $expiresAt);
            }
            return $next($request);
        }
    }

Тут, думаю пояснять не надо, все очевидно.

Создание класса для helper

В каталоге App давайте создадим подкаталог Helpers. И уже в этом каталоге создадим файл Online.php, следующего содержания:


<?php
    namespace app\Helpers;
    use Illuminate\Support\Facades\Auth;
    use Illuminate\Support\Facades\Cache;

    class Online
    {
        public static function isOnline($id,$type)
        {
            switch ($type):
                case 'admin':
                    $check = Cache::has('admin-is-online-' . $id);
                    break;
                case 'user':
                    $check = Cache::has('user-is-online-' . $id);
                    break;
                default:
                    $check = false;
            endswitch;
            return $check;
        }
    }

Т.е. мы создаем класс Online и в нем создаем статический метод, который принимает параметр $id – это ID проверяемого пользователя и $type – тип пользователя: admin или user (имеет доступ к админке или к кабинету, соответственно) и возвращает true или false.

Дальше нам необходимо подключить наш helper. Для этого мы будем использовать ServiceProvider. Что такое ServiceProvider в Laravel вы можете прочитать в официальной документации

Создание ServiceProvider в Laravel

Перейдем в консоль и выполним artisan команду:


php artisan make:provider OnlineServiceProvider

Откроем его на редактирование и в метод register добавим:


require_once app_path().'/Helpers/Online.php';

Все сервис-провайдер создан. Осталось его подключить к нашему приложению.

Регистрация ServiceProvider в приложении

Для этого откроем файл основных настроек app.php, который находится в каталоге config. И в массив ‘providers’ добавим:


…
App\Providers\OnlineServiceProvider::class,
…

И в массив ‘aliases’ добавим:


…
'Online' => App\Helpers\Online::class,
…

Сохраняем.

Теперь мы можем использовать наш хелпер в любом месте приложения. Вызвав


Online::isOnline($user->id,'admin')

Вот, как это выглядит у меня.

Проверка работы созданного helper Laravel

Заключение.

Мы с вами создали собственный helper в Laravel. Затем подключили его к Laravel используя созданный ServiceProvider.

 

Понравилась статья? Поделись с друзьями.
  • Add to favorites
  • Добавить ВКонтакте заметку об этой странице
  • Twitter
  • Facebook
  • Мой Мир
  • LiveJournal
  • Одноклассники
  • Блог Я.ру
  • MySpace
  • FriendFeed
  • В закладки Google
  • Google Buzz
  • Яндекс.Закладки
  • Reddit
  • StumbleUpon
  • Technorati
  • del.icio.us
  • БобрДобр
  • LinkedIn
  • Memori.ru
  • Сто закладок
  • Blogger
©2012-2017 По всем вопросам обращайтесь через форму обратной связи

Яндекс.Метрика