Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Добрый день. Допустим, есть сайт с авторизацией.
Нужно для авторизованного юзера брать какие-либо данные и выводить это на всех страницах сайта. Как правильно это реализовать - в Middleware? они предназначены не для этого, в ServisProvider? в нем нет доступа к сессии - нельзя получить авторизованного юзера. Или создавать метод в модели? хотя, данные эти, например, берутся не из бд?
Нормально ли в модели писать методы - которые получают данные не из бд - а например запросом вообще на другой ресурс, к какой-нить апишке...?
Не в сети
привет!
чтобы получать данные из стороннего АПИ хорошим тоном считается созданием, так называемого 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
Не в сети
Страницы 1