Dmitry
Голая пыха в одном файле ещё быстрее
Andrey
Чего их гуглить? Одни php-шные массивы ворочают и на чистом php с довольно странными слоями абстракций фигачат, у других сишные экстеншены. Что-то мне подсказывает, что c-extensions работают значительно быстрее
🎄Victor
Чуваки, а куда вы запихнете валидацию которая не зависит от входных данных от пользователя : например если нужно переместить заказ из статуса Б в статус С, а пользователь вызывает ф-ию когда заказ в статусе А и нужно это дело пресечь. Форм реквесты и вообще вся валидация она заточена под то чтобы входные данные проверять, а их тут в общем-то нет. /orders/{id}/mark-complete например, без параметров. Если без заморочек, просто в контроллере или еще куда?
mr.
Сервис у которого есть метод смены статуса в случае чего он кидает эксепшн. Я нуб, может это кривое решение)
Andrey
Зависит от того, как у тебя приложение построено. Я бы такую валидацию делал в самой модели, что бы никаким образом не получить невалидную модель.
🎄Victor
а в обоих случях бросать экспшн и в контроллере проверять его, и если че выдавать json типа success:false, reason:$exception->getMessage()
🎄Victor
вроде норм?
Andrey
Зачем в контроллере ловить exception? Там специальное место вроде для этого придумали
🎄Victor
а
🎄Victor
ну да
🎄Victor
спасибо :)
🎄Victor
Просто почему то редко пользовался этим, тот еще говнокодер
🎄Victor
:)
mr.
Какое специальное место?
🎄Victor
Там можно настроить глобальный обработчик экспешенов если не ошибаюсь
Andrey
ExceptionHandler
Andrey
https://laravel.com/docs/5.5/errors#the-exception-handler
🎄Victor
Люблю лару - все предусмотрено :)
mr.
А, глобальный обработчик ошибок. А как тогда пользователю на фронте например ошибку крассиво отобразить, а не стандартным рендером? Или просто не допускать смены статусов на невозможный?
Andrey
`public function render($request) { return response(...); } `
Antonio
Ну или json, если смена по ajax
Andrey
Там вот прям раздел же предвосхищяющий твой вопрос
Andrey
Reportable & Renderable Exceptions
Andrey
Даже называется так
🎄Victor
Как раз щас читаю его
🎄Victor
то есть грубо говоря делаем MyException и бросаем его когда хотим вывести в json ошибку?
🎄Victor
ну и в render обрабатываем как нам надо вывести в json-е
Andrey
Да, но если не ошибаюсь, если ты передаешь заголовок Accept: application\json он и так форматирует их в JSON. Хотя может и путая, давно у себя это делал и забыл
🎄Victor
да, возвращает, в постмане проверяю, но это роляет когда FormRequest например стоит с валидацией. А тут: ну он может и выбросит в json-е экспшн, но нужно же его красиво отформатировать типа [‘success’ => false, ‘reason’ => …]
mr.
то есть грубо говоря делаем MyException и бросаем его когда хотим вывести в json ошибку?
Я просто не местный. Имел в виду как допустим подсветить красненьким поле формы если запрос на смену статуса по классической схеме идет, когда РНР рендерит ошибки.
mr.
А ну тогда реквест валидацию видимо нужно использовать.
🎄Victor
В случае с экспешном не знаю
🎄Victor
просто если так то на беке вылетит whoops, по умолачнию. Можно задать свою вьюшку но.. это же не то в обычном случае массив $errors доступен, но если экспешн я хз)
mr.
Вот я о том же рассуждаю.
mr.
Видимо надо захендлить эксепшн в контроллере и положить ошибку в $errors.
Antonio
Ну смотря как ты получаешь запрос, по ajax или просто постом с перезагрузкой страницы?
mr.
Допустим просто постом с перезагрузкой страницы.
Antonio
Ну и вообще, почему всеже не запихнуть в обычную валидацию?
mr.
Да я уже выше вроде дошел до этого способа. Спасибо всем.
Antonio
Допустим просто постом с перезагрузкой страницы.
Тогда отдавай предыдущую страницу с формой используя ->with()
🎄Victor
А вот насчет экспешена. Эксепшн ведь должен нести какую-то логику, например InvalidOrderStatusException, или типа того. И их может быть много различных. Делать JsonException с понтом что я его обработаю в хендлере и буду вызывать везде где мне надо - костыль. Получается, для любого места где мне нужно впилить экспешн который бы красиво вышел в json-е, мне нужно делать свой эксепшн и правила для его отображения? (правила можно впихнть в trait, но не знаю насчет того чтобы плодить экспешены)
🎄Victor
хотя вот ребята не заморачиваются всем этим
🎄Victor
🎄Victor
Только если нужно передать на фронт какой-нибудь “type” параметр, чтобы он его обработал, тогда видимо нужен экспешн свой в каждом конкретном случае
🎄Victor
Ой ладно столько возможностей)
sund1😑
всем привет. у меня вопрос на счет паттерна repository. правильно я понимаю в него нужно выносить всю бизнес логику, в моделях оставлять только отношения ?
🎄Victor
Disagreed
🎄Victor
Бизнес логика в сервисных классах Репозиторий типа обертка над моделями. В идеальном SOLID мире, насколько я помню, репозиторий гораздо сложнее чем кажется. Он должен возвращать один и тот же тип данных, таким образом, чтобы например если ты сменишь репозиторий чтобы ничего не обвалилось. То есть, например, все возможные реализации репозиториев должны к примеру возвращать массив вместо eloquent моделей. Но это в 99% случаев не нужно, поэтому репозитории юзают как обертку над моделями Возникает вопрос: нафиг это нужно Я нашел очень удобное для себя применение: в репозиториях хорошо делать фильтрацию всего, чтобы не делать код типа if ($request->has(‘order_id’)) { $query->where(‘order_id’, $request->input(‘order_id’) } итп Вот эта вся логика у меня спрятана в репозиториях Но по сути они все же оперируют данными, но логики там нет
SiZE
Ну или любым другим источником данных
🎄Victor
в модели я лично выпихиваю отношения, mutator-ы, какие то вспомогательные методы аля isReady(), ну и все такое
🎄Victor
SiZE, клевая аватарка
SiZE
Возвращает dto
🎄Victor
внушает доверие твоим словам
Евгений
Что щас принято юзать? Надо обновлять инфу на странице при изменении данных на сервере. Бэк на ларе естественно
Dmitry
По идее
Евгений
Это в доках лары есть да? Пушер какой то, это оно?
Евгений
Щас погляжу
ThunderAL
есть эхо от ларавеля это есть "провайдер" этих сокетов. пушер — один из них. лучше чекни как эхо с socket.io работает
Dmitry
Щас погляжу
Я с этим не работал
Dmitry
Да пушер есть. Но он платный
Dmitry
Я вообще риалтайм не подымал, а не. Пробовал броадкаст + редис + нода
Dmitry
Ну обычная связка
sund1😑
https://laravel.com/docs/5.5/broadcasting с пушером там все легко делается
sund1😑
Это в доках лары есть да? Пушер какой то, это оно?
Евгений
спасибо всем
Sviatoslav
Привет всем
mr.
Подтверждаю, я ваш бродкастинг и эхо сервер на другой фрейм портировал и кайфую до сих пор)
ceii80
пхпшторм или пхплобстер?
ceii80
или лучше питон?
Andrey
Любитель змею подушить что ли?
Antonio
Есть ли пакет для создания расписания? Нужно организовать запись клиентов и легко отобразить ее
mr.
Доброе утро. Ребят, встречал ли кто-либо расширение для "мержа" .env и .env.dist? В чем суть, когда добавил новый параметр, хотелось бы иметь удобный способ это увидеть и сразу "смержить".
ThunderAL
как через ajax скачать файл? есть post запрос с кастомным хеддером. надо скачать файл и отдать его юзеру как будто бы он качал его через браузер