• Время чтения ~2 мин
  • 22.03.2023

Команда Laravel выпустила версию 10.4 с методом File::json(), преобразовав существующие отношения HasMany в отношение HasOne, новое утверждение тестового ответа и многое другое.

Метод

File::json()Остин Уайт внес File::json() свой вклад в метод для удобства получения данных в кодировке JSON из файла:

// Before
$contents = File::get('sample.json');
$data = json_decode($contents, true);

// After
$data = File::json('sample.json');

Assert неподдерживаемый тип

носителяШамимул Алам внес вспомогательный элемент утверждения для 415 Unsupported Media Type кода состояния ответа:

$response->assertUnsupportedMediaType();

Преобразование существующего отношения

HasMany в HasOneЛюк Кузьмиш внес свой вклад в преобразование HasMany в HasOne и MorphMany в MorphOne

Возьмем этот пример необходимости определения двух отношений:

class User extends Model
{
    public function logins(): HasMany {
        return $this->hasMany(Login::class, 'some_id', 'the_other_id');
    }
    public function latestLogin(): HasOne {
        return $this->hasOne(Login::class, 'some_id', 'the_other_id')->latestOfMany();
    }
}

С помощью этого PR теперь вы можете сделать следующее с помощью ->one() метода:

class User extends Model
{
    public function logins(): HasMany {
        return $this->hasMany(Login::class, 'some_id', 'the_other_id');
    }
    public function latestLogin(): HasOne {
        return $this->logins()->one()->latestOfMany();
    }
}

Метод one() доступен на HasMany, HasManyThroughи MorphMany.

Создание макросного метода для paginationInformation

Frans Slabbekoorn способствовало возможности определения макроса, paginationInformation который позволяет настраивать информацию о разбивке на страницы без необходимости расширения всех ресурсов в качестве базового ресурса:

/** @mixin \Illuminate\Http\Resources\Json\ResourceCollection */
class ResourceCollectionMixin
{
    public function paginationInformation(): Closure
    {
        return fn ($request, $paginated, $default) => collect($default)->mapWithKeysRecursively(fn ($item, $key) => [Str::camel($key) => $item])->toArray();
    }
}

Примечания

к выпуску Вы можете увидеть полный список новых функций и обновлений ниже и разницу между 10.3.0 и 10.4.0 на GitHub. Следующие примечания к выпуску взяты непосредственно из журнала изменений:

v10.4.0

Добавлено Illuminate/Testing/Concerns/AssertsStatusCodes::assertUnsupportedMediaType()

  • Добавлено Illuminate/Testing/Concerns/AssertsStatusCodes::assertUnsupportedMediaType() Illuminate/Testing/Concerns/AssertsStatusCodes::assertUnsupportedMediaType() (#46426)
  • Добавлено Illuminate/Testing/Concerns/AssertsStatusCodes::assertUnsupportedMediaType() curl_error_code: 77 to DetectsLostConnections (#46429)
  • Разрешить преобразование HasMany в HasOne && MorphMany в MorphOne (#46443)
  • Добавить опцию для создания макросного метода для пагининформации (#46461)
  • Добавлено Illuminate/Testing/Concerns/AssertsStatusCodes::assertUnsupportedMediaType() Illuminate/Filesystem/Filesystem::json() (#46481)

Исправлено

  • Исправление проанализированных входных аргументов для событий команд с помощью перемаршрутизации диспетчера (#46442)
  • Исправление использования перечислений с необязательными неявными параметрами (#46483)
  • Исправление устареваний для встроенных изображений в почтовой программе Symfony (#46488)

Изменено

  • Добавлено Illuminate/Testing/Concerns/AssertsStatusCodes::assertUnsupportedMediaType() alternative database port in Postgres DSN (#46403)
  • Разрешить вызов getControllerClass на маршрутах на основе закрытия (#46411)
  • Удалить устаревшие method_exists(ReflectionClass::class, 'isEnum') вызов ( #46445)
  • Преобразование красноречивого строителя в базовый конструктор в whereExists (#46460)
  • Рефакторинг общего статического методаExcludedByOptions метод для черты (#46498)

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

Про мене

Professional Fullstack Developer with extensive experience in website and desktop application development. Proficient in a wide range of tools and technologies, including Bootstrap, Tailwind, HTML5, CSS3, PUG, JavaScript, Alpine.js, jQuery, PHP, MODX, and Node.js. Skilled in website development using Symfony, MODX, and Laravel. Experience: Contributed to the development and translation of MODX3 i...

Об авторе CrazyBoy49z
WORK EXPERIENCE
Контакты
Ukraine, Lutsk
+380979856297