Александр
пример: есть сервис который получает на вход модель актив рекорд, с ней работает получая из нее проперти, обрабатывает эти проперти должным образом, и возвращает их уже обработанную коллекцию
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
Допустим сервису заказа тоже может быть нужен такой же товар, а у него свой интерфейс.. Надо будет 2 реализовывать?
Anton
IProductable должна получить модель с продуктом
Anonymous
я имею ввиду кто пользователь этого интерфейса
Anton
Product implements IProductable
Anton
продукт
Anton
ты ж его собираешься в корзину класть
Anton
и в заказе потом выодить
Anonymous
ну пользоваться этим интерфейсом будет корзина
Anton
не только
Anonymous
соответственно она должна знать про этот интерфейс
Anonymous
хм ну вот про то и речь
Anonymous
А как переносимая корзина узнает о каком то внешнем интерфейсе
Anton
Куда ты ее переносить собрался ?
Евгений
кто какой WYSIWYG редактор юзает с возможностью загрузки картинок на сервер?
Anonymous
Куда ты ее переносить собрался ?
ну допустим это вообще не моя корзина
Anton
Все чувак :) я работать )) мне демогогию разводить на пустом месте некогда )
Евгений
а у elfinder есть какие нибудь темы, чтоб под буцтрап внешний вид сделать?
Daniil 👾
https://github.com/search?q=elfinder+theme ну там всё сводится к закидыванию css файла в нужное место
Daniil 👾
по дефолту смотрится вот так - https://studio-42.github.io/elFinder/, ничего лишнего)
Евгений
не нравится по дефолту)
Евгений
спасибо
Arcos
речь о 1м случае, ессно. под живым объектом что ты имеешь в виду? проперти модели через магический гет достаются в рядовом случае, если мы ща про элокуент говорим
>живой объект инициированный класс со всей логикой (а не только значения) > про элокуент говорим В элокуенте публичные проверти = поля. Может мы не о полях говорим?
Arcos
Если не о полях, тогда вопрос зачем в элокуент вообще они живут, кроме предопределенных
Arcos
Или я элоквент не так юзаю)
Nik
>живой объект нет такого термина, в вики >В элокуенте публичные проверти = поля. где ты там вообще пидел публичные проперти и более того - для чего?
Romuald
Парни. Если нужно через ORM получить объекты модели, но при этом некоторые поля нужно по своему отформатировать, можно для этого ресурс использовать?
Oleh
Ресурс срабатывает только при энкоде
Oleh
Используй аксессоры
UNEIGHT
В можельке сделай метод getNameAttribute()
Romuald
Понял, спасибо
Daniil 👾
кстати, про аксессоры. недавно столкнулся с тем, что если используется пакет spatie/laravel-translatable и поле в модели занесено в переменную $translatable, то нельзя просто так взять и поиграться с этой колонкой при получении данных.
Romuald
Спасибо! Даже под мою задачу уже было решение. Невнимательно читал доку protected $casts = [ 'field' => 'array' ]
yuritbox
А если модель имеет вложенную модель через связь, но хочется возвращать не все поля вложенной модели?
Romuald
А если модель имеет вложенную модель через связь, но хочется возвращать не все поля вложенной модели?
Не знаю на сколько костыльно $query->with(['bookmarks' => function ($q) { $q>select('id'); }]);
yuritbox
хм, спасибо, поидее можно и с коллекцией отобрать нужные поля...
Romuald
У меня просто единоразовая задача. Если повторится, то в модель перекину
Maksim (Ellrion)
там несколько решений. можно выбирать только часть полей используя sеlect, можно использовать проперти hidden у связанной модели, можно это поле выставлять "налету" используя метод setHidden (addHidden). можно использовать ресурсы
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']] и т.д.
Jura
покажи что делаешь
Anonymous
лет 5 назад бытовало мнение что более 3-4к элементов в 1 папке не должно существовать, начнет подтупливать фс
ну пока вроде не замечаю, хотя проект пока в dev, да и диски ssd... на одном под 200к подпапок и живет вроде
Jura
http://prntscr.com/jxyh7k
Jura
не работает
Jura
работает все, видимо чтото неправильно делаешь
Daniil 👾
локали поставь крч
Rustam
мне кажется карбон сам не умеет так, ну надо локали поставить
Rustam
Делаю так\