Antonio
$response = $next($request);
if ($response->status() >= 200 && $response->status() < 400) {
$resp_data = $response->getOriginalContent();
if (!is_array($resp_data)) $resp_data = ['data'=>$resp_data];
$resp_data['more'] = [
'foo' => '',
'bar' => ''
];
$response->setContent($resp_data);
}
Antonio
Если подскажете как правильно проверить, что это удачный запрос, то вообще супер будет
Antonio
Dmitry
мидлвара работает между запросом и контроллером. Что бы модифицировать ответ, используй ивенты
Antonio
мидлваре прекрасно работает и между контроллером и выдачей
Dmitry
Antonio
что не поменяется?
Dmitry
ты проверяшь статус ответа, до того как он обработан
Dmitry
да все что угодно может изменится
Antonio
$response = $next($request) получает ответ уже после обработки контроллером, или я неправ?
Dmitry
хм... по идеи это ответ от всех последующих мидлвар
Dmitry
а уже потом готовый реквест передается в контроллер
Dmitry
но может я и ошибаюсь...
Antonio
ошибаешься
Antonio
документация говорит обратное
Antonio
https://laravel.com/docs/5.5/middleware#defining-middleware
Antonio
before&after
Макс
Antonio
ну по хорошему, я везде возвращаю ресурс/ресурсколлекцию. И тогда все нормально добавляется в JSON.
Antonio
но есть желание обработать тот вариант, когда контроллер вернет что-то кроме JSON (логическая ошибка, тестирование, и т.д.) И всеравно отдать JSON
Antonio
при этом не вспоминать об это в каждом экшене.
Antonio
Короче вопрос, можно ли Response превратить в JSONResponse ?
Dmitry
Antonio
сами классы отличаются методами
Dmitry
ну так просто создай его, все данные у тебя есть
Antonio
а как сохранить правильные хедеры?
Dmitry
в конструктор их передавай
Dmitry
которые были уже в запросе
Antonio
глупый вопрос наверное, но в классе Response есть метод
header(string $key, array|string $values, bool $replace = true)
Set a header on the Response.
но на получение ничего нет.
Antonio
на данном этапе дополнительные заголовки вроде бы не формирую, придется пока смириться с тем вариантом, что есть сейчас
Antonio
$response = $next($request);
if ($response->status() >= 200 && $response->status() < 400) {
$resp_data = $response->getOriginalContent();
if (!is_array($resp_data)) $resp_data = ['data'=>$resp_data];
$resp_data['more'] = [
'foo' => '',
'bar' => ''
];
if ($response instanceof JsonResponse)
$response->setData($resp_data);
else $response = response()->json(
$resp_data,
$response->status()
);
}
return $response;
Dmitry
там вроде есть параметр публичный headers
Dmitry
как-то так наверное будет $request->headers->all()
Vladimir
Подскажите на счёт создания пакетов для Laravel. Есть какие-нибудь аналоги workbench из laravel 4? Или сейчас структуру пакета нужно создавать вручную?
Сергей
Подскажите если у меня поле json то как в контроллере обращаться к данным json?)
Сергей
Переводить в массив?
Сергей
Antonio
в моделе есть параметр $cast
Antonio
https://laravel.com/docs/5.5/eloquent-mutators#attribute-casting
Сергей
Alex
строка
http://php.net/manual/ru/function.json-decode.php
Antonio
зачем это делать каждый раз, если можно добавить магии?
Сергей
Antonio
у меня вот такая конструкция работает прекрасно:
Antonio
protected $casts = [
'feedback' => 'Collection'
];
Alex
@kardashov а в чем вопрос?
Antonio
все флаги тоже стараюсь закастить в bool
Сергей
Maksim (Ellrion)
Maksim (Ellrion)
Сергей
В объект тоже получилось)
Maksim (Ellrion)
а вот если хочется типизированности то раньше точно небыло и я писал например https://github.com/Larapac/EloquentValueObjectCasts
Сергей
Antonio
странно
Сергей
А подскажите как правильно реализовать вывод друг за другом?
Допустим нужно на каждой новой странице по клику на следующую выводить посты друг за другом в порядке сортировки?
Сергей
Нужно передовать на страницу все записи и потом искать открытую и брать следующую?
Сергей
ну точнее в контроллере это передавать, ссылку следующей
Antonio
пэджинатор с шагом 1? =)
Сергей
не совсем) Есть открытая статья к примеру и есть кнопка следующая статья, как в кнопку следующей статьи передать ссылку? Если в базе они не друг за другом идут, а по полю сортировки нужно брать следующую статью
Antonio
ну тогда в моделе/контроллере/сервисе вычисли id/url и передай во вью
Сергей
Ага, ну я так и думал, просто решил узнать может есть какой нибудь способ по лучше, о котором я не знаю)
Сергей
Подскажите правильно ли так делать выборку следующей записи
$lessons = Lesson::where([
['section_id', '=', $section->id],
['sort', '>=', $lesson->id],
['name', '<>', $lesson_name]
])
->orderBy('sort', 'asc')
->firstOrFail();
Ахмедов
/link@yetanotherstatsbot
Yet Another Stats (β)
https://b.yasb.exileed.com/t/laravel_pro
Сергей
Antonio
ну я же не знаю, какая у Вас логика сортировки
Antonio
$nextLesson = $lesson->section->lessons()->where([['sort','>=',$lesson->id],['name','<>',$lesson->name]])->get();
Antonio
я бы вот так дергал, через зависимости
Antonio
в таком случае, если вы добавите в будущем какие-то глобальные ограничения на связку section->lessons, то они отработают и в этой выборке
Сергей
Yet Another Stats (β)
https://b.yasb.exileed.com/t/laravel_pro
Yevhenii
Всем привет! Только изучаю Laravel
Подскажите пожалуйста:
Использую сборку homestead
в файле homestead.yml указал mariadb: true
не могу зайти в базу по адресу 127.0.0.1:33060/
В чем может быть проблема? Гугл и дока не помогла. Спасибо за ответ!