Александр
пример: есть сервис который получает на вход модель актив рекорд, с ней работает получая из нее проперти, обрабатывает эти проперти должным образом, и возвращает их уже обработанную коллекцию
Arcos
ты в сервисах мокаешь метод сервиса или модель локвент, используемую там?
Александр
Александр
но есть методы которые мне нужно протестить, и которые юзают внутри себя модель элокуента
Александр
можно конечно сделать в сервисе отдельный протектед метод просто для того чтобы он вытаскивал мне нужные данные из модельки, и замокать этот метод так чтобы он просто ретернил нужный результат
Александр
но помоему это херня какаято
Александр
какойто ваще вопрос у тебя странный
Александр
типа привести случай когда мне нужен источник данных внутри сервиса. да таких случаев тьма тьмущая
в доке симфони на этот случай описано как правильно мокать репозитории
что же до лары - даже джеффри на ларакастах настаивает на том чтобы делать только интеграционные тесты на те сервисы которые работают с моделями
Anton
Тебе нужно сделать класс корзины, как хочешь делай если у тебя корзина может менять место хранения сдлей интерфейс IBasket Add, Remove, Get, List, затем бомбани класс например SessionBasket implements IBasket, реализуй в нем хранение товара, товар напирмер сделай так что б он реализовывал интерфейс напрмер назови его IProductable { getPrice, getTtile, getProps }, ну и так далее
Anton
и потом сдлей севрис
Anton
В контроллере корзины я думаю сервисы тебе не нужны вообще будут
Anton
потому что ты примешь класс баскет в контроллер через DI, а затем будешь делать $basket->add, basket->remove, basket->get, basket->list
Andrew
Да чего вы спорите) сделайте сначала как видите, сделайте так, чтобы работало, учтите все то, что хотите/можете учесть. А дальше есть замечательная штука - "рефакторинг" зовется. Постепенно придете к желанному виду модуля :-)
Arcos
какойто ваще вопрос у тебя странный
Если ты хочешь использовать метод для получения данных для дальнейшего теста - ео можно замокать. Т.к. не его логика тестируется.
Если ты тестируешь метод, который работает перерабатывает данные и возвращает новый результат то тут 2 пути:
1. Передать живой объект и получить его обратно с обновленными данными, далее assert.
2 (приходится иногда): вызывается метод, дальше происходит какая-то магия и каким-то загадочным образом происходят изменения, которые проверяются уже в базе.
Но втрой слуай это функциональный тест, а не модульный.
Arcos
они отлличаются отвественностью
Arcos
При построении логики я стараюсь писать именно модульные тесты
Anonymous
Тебе нужно сделать класс корзины, как хочешь делай если у тебя корзина может менять место хранения сдлей интерфейс IBasket Add, Remove, Get, List, затем бомбани класс например SessionBasket implements IBasket, реализуй в нем хранение товара, товар напирмер сделай так что б он реализовывал интерфейс напрмер назови его IProductable { getPrice, getTtile, getProps }, ну и так далее
с 1 понятно, это задача корзины.. А интерфейс IProductable где должен быть? С одной стороны его должна кушать корзина, но с другой не только ей же такой интерфейс может понадобиться
Александр
Александр
вот и приходится его мокать
Anonymous
Допустим сервису заказа тоже может быть нужен такой же товар, а у него свой интерфейс.. Надо будет 2 реализовывать?
Anton
IProductable должна получить модель с продуктом
Anonymous
Anonymous
я имею ввиду кто пользователь этого интерфейса
Anton
Product implements IProductable
Anton
продукт
Anton
ты ж его собираешься в корзину класть
Anton
и в заказе потом выодить
Anonymous
ну пользоваться этим интерфейсом будет корзина
Anton
не только
Anonymous
соответственно она должна знать про этот интерфейс
Anonymous
хм ну вот про то и речь
Anonymous
А как переносимая корзина узнает о каком то внешнем интерфейсе
Anton
Куда ты ее переносить собрался ?
Евгений
кто какой WYSIWYG редактор юзает с возможностью загрузки картинок на сервер?
Anton
Все чувак :) я работать )) мне демогогию разводить на пустом месте некогда )
Daniil 👾
Евгений
а у elfinder есть какие нибудь темы, чтоб под буцтрап внешний вид сделать?
Daniil 👾
https://github.com/search?q=elfinder+theme
ну там всё сводится к закидыванию css файла в нужное место
Daniil 👾
по дефолту смотрится вот так - https://studio-42.github.io/elFinder/, ничего лишнего)
Евгений
не нравится по дефолту)
Евгений
спасибо
Arcos
Если не о полях, тогда вопрос зачем в элокуент вообще они живут, кроме предопределенных
Arcos
Или я элоквент не так юзаю)
Nik
>живой объект
нет такого термина, в вики
>В элокуенте публичные проверти = поля.
где ты там вообще пидел публичные проперти и более того - для чего?
Romuald
Парни. Если нужно через ORM получить объекты модели, но при этом некоторые поля нужно по своему отформатировать, можно для этого ресурс использовать?
Daniil 👾
Oleh
Ресурс срабатывает только при энкоде
Oleh
Используй аксессоры
UNEIGHT
В можельке сделай метод getNameAttribute()
Romuald
Понял, спасибо
Daniil 👾
кстати, про аксессоры. недавно столкнулся с тем, что если используется пакет spatie/laravel-translatable и поле в модели занесено в переменную $translatable, то нельзя просто так взять и поиграться с этой колонкой при получении данных.
Romuald
Спасибо! Даже под мою задачу уже было решение. Невнимательно читал доку
protected $casts = [
'field' => 'array'
]
yuritbox
А если модель имеет вложенную модель через связь, но хочется возвращать не все поля вложенной модели?
yuritbox
хм, спасибо, поидее можно и с коллекцией отобрать нужные поля...
Евгений
Romuald
У меня просто единоразовая задача. Если повторится, то в модель перекину
Maksim (Ellrion)
там несколько решений. можно выбирать только часть полей используя sеlect, можно использовать проперти hidden у связанной модели, можно это поле выставлять "налету" используя метод setHidden (addHidden). можно использовать ресурсы
Nik
Romuald
Самая удобная на мой взгляд - коллекции
Maksim (Ellrion)
соответственно подход зависит от сложности приложения и кол-ва мест где такое нужно. самый продвинутый и гибкий это конечно ресурсы, по сути вью леер для json респонсов
Rustam
Парни привет
Rustam
Carbon\Carbon::parse($post->created)->formatLocalized('%d %B %Y')
Rustam
Как сделат ьчтобы месяц выводился короткий в 3 буквы?
Jura
M Сокращенное наименование месяца, 3 символа от Jan до Dec
Jura
http://php.net/manual/ru/function.date.php
Anonymous
Приветствую. В файловой системе есть нечто подобное:
Папка images, в ней куча подпапок, имена соответствуют id материалов. В каждой из подпапок уже jpg-файлы, т.е. images/111/1.jpg, images/111/2.jpg и тд.
Можно ли как то с помощью Storage оптимально получить список подпапок с листингом файлов? рекурсивно обходить что то неохота, там папок пока под 10к, дальше будет больше
Т.е., хотелось бы получить на выходе массив типа ['111'=>['1.jpg', '2.jpg']] и т.д.
Nik
Rustam
Jura
покажи что делаешь
Jura
http://prntscr.com/jxyh7k
Jura
не работает
Jura
работает все, видимо чтото неправильно делаешь
Daniil 👾
Daniil 👾
локали поставь крч
Rustam
мне кажется карбон сам не умеет так, ну надо локали поставить
Rustam
Делаю так\