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
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.
А ну тогда реквест валидацию видимо нужно использовать.
Antonio
🎄Victor
В случае с экспешном не знаю
🎄Victor
просто если так то на беке вылетит whoops, по умолачнию. Можно задать свою вьюшку но.. это же не то
в обычном случае массив $errors доступен, но если экспешн я хз)
mr.
Вот я о том же рассуждаю.
mr.
Видимо надо захендлить эксепшн в контроллере и положить ошибку в $errors.
Antonio
Ну смотря как ты получаешь запрос, по ajax или просто постом с перезагрузкой страницы?
mr.
Допустим просто постом с перезагрузкой страницы.
Antonio
Ну и вообще, почему всеже не запихнуть в обычную валидацию?
mr.
Да я уже выше вроде дошел до этого способа.
Спасибо всем.
🎄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
SiZE
Ну или любым другим источником данных
🎄Victor
в модели я лично выпихиваю отношения, mutator-ы, какие то вспомогательные методы аля isReady(), ну и все такое
🎄Victor
SiZE, клевая аватарка
SiZE
Возвращает dto
🎄Victor
внушает доверие твоим словам
Dmitry
Евгений
Что щас принято юзать? Надо обновлять инфу на странице при изменении данных на сервере. Бэк на ларе естественно
Dmitry
Dmitry
По идее
Евгений
Это в доках лары есть да? Пушер какой то, это оно?
Dmitry
Евгений
Щас погляжу
ThunderAL
есть эхо от ларавеля это есть "провайдер" этих сокетов. пушер — один из них. лучше чекни как эхо с socket.io работает
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 запрос с кастомным хеддером. надо скачать файл и отдать его юзеру как будто бы он качал его через браузер
mr.