Size: a a a

2020 March 18

АС

Альберт Степанцев in PHP
H ᵘ ʜ ᵘ
этим я хотел сказать, что файл приходит по хттп на апи, которое уже передаёт его в Manager
по http не приходит файл
но я уже начинаю придираться к словам
источник

H ᵘ ʜ ᵘ in PHP
Dmitriy Tkachenko
Прочему Store возвращает новый инстанс файла? Где семантическая нагрузка?
возвращает он примерно это
return new File([
           'sysPath' => $newFilePath,
           'uriPath' => $uriPath,
           'name' => "$newFileName.$extension",
           'mimeType' => $mimeType,
           'size' => $file['size'],
       ]);
источник

АС

Альберт Степанцев in PHP
Dmitriy Tkachenko
Статические методы и есть просто функции, не?
плюс стейт класса
источник

DT

Dmitriy Tkachenko in PHP
Статический стейт
источник

АС

Альберт Степанцев in PHP
и self и static внутри
источник

DT

Dmitriy Tkachenko in PHP
H ᵘ ʜ ᵘ
возвращает он примерно это
return new File([
           'sysPath' => $newFilePath,
           'uriPath' => $uriPath,
           'name' => "$newFileName.$extension",
           'mimeType' => $mimeType,
           'size' => $file['size'],
       ]);
Ну, т. Е. Объекта не было, но когда ты сохранил, он появился
источник

АС

Альберт Степанцев in PHP
Dmitriy Tkachenko
Статический стейт
я предпочитаю термин "стейт класса"
потому что термины "динамический" и "статический" начинают путаться с "времени компиляции" vs. "в рантайме"
источник

АС

Альберт Степанцев in PHP
класса в рантайме как бы нет, но его стейт вполне есть ))
источник

H ᵘ ʜ ᵘ in PHP
Dmitriy Tkachenko
Ну, т. Е. Объекта не было, но когда ты сохранил, он появился
да, как-то так)
источник

DT

Dmitriy Tkachenko in PHP
Альберт Степанцев
я предпочитаю термин "стейт класса"
потому что термины "динамический" и "статический" начинают путаться с "времени компиляции" vs. "в рантайме"
Когда у тебя в одном файле 2 стейта, путаницы ещё больше)
источник

АС

Альберт Степанцев in PHP
не очень понял, но пофигу
источник

АС

Альберт Степанцев in PHP
я ваще кино смотрю ))
источник

H ᵘ ʜ ᵘ in PHP
Альберт Степанцев
это каша и говнокод
как бы вы организовали простой сторедж с возможностью загружать файлы и получать на них ссылки по ид?
источник

АС

Альберт Степанцев in PHP
сторедж не занимается загрузкой файлов по http
источник

АС

Альберт Степанцев in PHP
вот и весь ответ
источник

АС

Альберт Степанцев in PHP
сделайте для начала отдельный класс
объект которого умеет что-то делать с $_FILES
например понимать - был ли файл передан, без ошибок, совпадает mime-type с ожидаемым, совпадает заявленный размер с реально сохраненным в tmp
ну и наконец умеет перемещать из временного места в постоянное и решать коллизии имен в соответствии с какой-то стратегией переименования

и вот переместив  - возвращает уже объект типа File
бинго
источник

АС

Альберт Степанцев in PHP
а дальше вы ничего уже не знаете про то, откуда файл взялся
вы видите тупо файл и всё
источник

АС

Альберт Степанцев in PHP
а вы делаете кашу из http, файлов, хранилищ, репозиториев и всего прочего
источник

H ᵘ ʜ ᵘ in PHP
Альберт Степанцев
а вы делаете кашу из http, файлов, хранилищ, репозиториев и всего прочего
вы меня точно не так поняли)
есть апи, принимающий запросы (из браузера, ажаксом), у которого есть, скажем, 3 метода - upload, get и delete.
соответственно, при запросе на /upload и наличием файла в массиве $_FILES должна произвестись загрузка файла на сервер и сохранение названия\пути\остального в базу.
в методе апи upload производится проверка, что пришел действительно файл, после этого вызывается Manager->store($file).

внутри store() происходит примерно следующее:
/** @var File */
$uploadedFile = $this->storage->upload($file);
/* сохранение данных из $uploadedFile в базу */

внутри $this->storage->upload() идёт уже процесс создания файла:
валидация (размер, майм)
создание сабдиректорий для этого файла
сам move_uploaded_file
создание объекта File и заполнение свойств
потом этот объект возвращается
источник

АС

Альберт Степанцев in PHP
ОК, делайте так
источник