Laravel по-русски

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

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

#1 02.02.2018 12:12:28

Как получать данные для юзера?

Добрый день. Допустим, есть сайт с авторизацией.
Нужно для авторизованного юзера брать какие-либо данные и выводить это на всех страницах сайта. Как правильно это реализовать - в Middleware? они предназначены не для этого, в ServisProvider? в нем нет доступа к сессии - нельзя получить авторизованного юзера. Или создавать метод в модели? хотя, данные эти, например, берутся не из бд?
Нормально ли в модели писать методы - которые получают данные не из бд - а например запросом вообще на другой ресурс, к какой-нить апишке...?

Не в сети

#2 10.03.2018 15:17:47

Re: Как получать данные для юзера?

привет!

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

<?php

class SomeServiceGateway
{
    public function getItems()
    {
        // здесь мы общаемся со сторонним апи

        // если этот сервис предоставляет либу для работы
        // со своим апи используем его здесь.
        $result = \SomeOtherSerivce\Items::get();

        // если нет - просто делаем запросы руками по их документации
        $response = \GuzzleHttp\Client::get('url', 'params');

        return $this->format($resposne);
    }

    protected function format($response)
    {
        // каким то образом приводим ответ от стороннего сервиса в тот вид,
        // который будет удобен для нашего приложения и подходит под его нужды
        // в этом и весь смысл Gateways.

        return json_decode($response->getBody()->getContents());
    }
}

теперь чтобы поделиться этим всем во своими вьюхами можно использовать view composer https://laravel.com/docs/5.6/views#view-composers

Или можно использовать View::share,

class AppServiceProvider extends ServiceProvider
{
    
    public function boot()
    {
        View::share('items', (new SomeServiceGateway)->getItems());
    }

Изменено code_bright_anywhere (10.03.2018 15:21:29)


Пишу бэкенд для своего мобильного приложения, делюсь с миром, заходите посмотреть, много всего интересного https://youtu.be/C5M6-ycJ5gs

Не в сети

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