и тогда всё по канонам DI , разве нет?Нет. В данном случае у вас объекты-сущности, отражающие какой-то тип реальных объектов (документов, пользователей, деревьев, трусов - не суть), для их взаимодействия не нужно как-то показывать им друг на друга, все взаимодействия между ними могут быть прописаны в коде, использующем их в качестве независимых единиц (хороший пример - код в контроллере, если вы понимаете концепцию MVC). DI же передает [сервисные] объекты, без которых сам объект будет либо не функционален (например та же БД для модели типа Active Record), либо обслуживающий код будет часто повторяться и есть смысл вынести их взаимодействие в метод объекта (если лень), или создать объект взаимодействия (что правильнее), как например при проверке ролей и прав в RBAC/ACL, но тут я не вижу никаких к тому предпосылок.
параметры имеются, не пустые , валидные, готовый json выдающий ошибку.ну, как минимум "costSale":14.039999999999999 не соответствует ожидаемому типу double, который у вас флоат...
{"Error":"Недопустимое значение для параметров article, brand, suppliername, costsale, quantity. Параметры не могут быть пустыми"}ну так что не понятно? проверяйте что попадает в эти поля, очевидно что какая-то лажа с отправляемыми данными.
вопрос в увеличении степени автоматизации. где она максимальна?Только смотреть под стек, думаю что людей которые работали с большим количеством таких штук под разные стеки просто нет, ну или их количество крайне мало и не пересекается с активом тостера. Так что как минимум указание стека сильно поможет. Под ту же лару вояджер настраивается весьма гибко, но не умеет в сложно связанные сущности, только один-ко-многим с указанием справочника... Ну или я не так глубоко копал. Пользовался на простеньком проекте, где нужно было править странички, но что-то свое с редактированием мутить было лень. Ищите под свой стек, читайте доки, другого особо и не посоветуешь...
Выходит, что сканировать все файлы придется в любом случае?Файлы в папке лежат не физически, а привязаны через (условно) соответствия папка-файл, вышепредставленная последовательность - условное отображение, которое к физическому размещению файлов на диске никакого отношения не имеет. То есть чтобы знать что лежит в папке, программе надо от ОС получить список файлов из данной папки и упорядочить его по какому-то признаку (в вашем случае по имени). Без полного списка это естественно сделать невозможно.
Сначала key = 0 потом 1 потом 2 потом опять 1 О_оЧто вас смущает? Там же 2 цикла, закончился первый, начался второй с новым массивом. Что мешает просмотреть весь массив $aTabs таким же образом - загадка.
а необходимо, я так понимаю, убрать отступ у всех предыдущих.Если внимательно читать задачи
почему то одна строка вылазит из общей структурыто лишней работы можно избежать. Внимательнее надо быть.
а принтер, принтер нет, какой-то стандартный MicrosoftPrint хз что это такоеЭто виртуальный принтер, печать из которого идет в файл, его так же надо настраивать на тот формат "бумаги", который вы задали в mpdf. Ну, или если стоит задача именно на этом конкретном принтере добиться правильного вывода - поменять формат бумаги в mpdf на тот что стоИт в настройках принтера.