Почему передача экземпляра \Illuminate\Http\UploadedFile в пользовательское приведение приводит к бесконечному циклу?Php

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Почему передача экземпляра \Illuminate\Http\UploadedFile в пользовательское приведение приводит к бесконечному циклу?

Сообщение Anonymous »

У меня есть модель конфигурации, в которой я реализовал пользовательское приведение типов, метод получения работает отлично, но давайте посмотрим на метод установки.
Для ясности я сократил примеры кода до только то, что имеет отношение к контексту.
App/Models/Configuration.php

Код: Выделить всё

use Illuminate\Database\Eloquent\Model;

class Configuration extends Model
{
protected function casts(): array
{
return [
'value' => \App\Casts\ConfigValue::class,
];
}
}
App/Casts/ConfigValue.php

Код: Выделить всё

use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\UploadedFile;

class ConfigValue implements CastsAttributes
{
public function set(Model $model, string $key, mixed $value, array $attributes): mixed
{
$saveable = $value instanceof UploadedFile ||
(isset($value[0]) && $value[0] instanceof UploadedFile);

echo 1; // Take note of this

return match (true) {
...// Other conditions
$saveable => $this->doUpload(UploadedFile|array $value),
...// Other conditions
default => (string) $value,
};
}
}
Давайте также не будем беспокоиться о логике загрузки файлов: проблема в том, что X-Debug выдает ошибку бесконечного цикла после завершения сценария при обработке загрузки. Но если я сразу верну вывод, на изображении ниже вы увидите, что скрипт запускается несколько раз, прежде чем вернет ответ, и добавление к этому логики загрузки приведет нас к бесконечному циклу.
Изображение

App/Controllers/ConfigController.php

Код: Выделить всё

$config = Configuration::where('key', $key)->first();

$config->value = $value;
$config->save();
На контроллере $key и $value взяты из цикла foreach $request->configurations, вышеприведенное работает хорошо, когда $value не является экземпляром \Illuminate\Http\UploadedFile, и в этом случае мы попадаем в бесконечный цикл.
Что я здесь делаю не так? п>

Подробнее здесь: https://stackoverflow.com/questions/789 ... tom-cast-r
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»