Table des matières
1、简介
2、使用转化器
为某个类注册转化器
使用响应构建器
2、 Fractal
全自动关联关系渴求式加载
高级配置
通过响应构建器实现高级使用
资源key
使用回调
3、自定义转化层
Maison développement back-end tutoriel php Laravel & Lumen RESTFul API 扩展包:Dingo API(五) -- 转化器(Transformer)

Laravel & Lumen RESTFul API 扩展包:Dingo API(五) -- 转化器(Transformer)

Jun 20, 2016 pm 12:32 PM

1、简介

通过转化器,你可以将对象转化为数组,并强制转化整型和布尔类型,包括分页结果和嵌套关联。

本章节我们主要讨论转化器及其使用,这里的转化器包括以下两层意思:

  • 转化层(transformation layer)是一个准备和处理转化器的库
  • 转化器(transformer)是一个获取原始数据并将其转化为数组格式的类,处理器的处理方式取决于转化层。

2、使用转化器

有多种方式使用转化器。

为某个类注册转化器

当你为某个类注册转化器后就可以从路由返回这个类(假设它可以被转化为数组)并自动经过转化器处理:

app('Dingo\Api\Transformer\Factory')->register('User', 'UserTransformer');
Copier après la connexion

这在使用模型的简单API中很有用,因为你可以从路由中直接返回模型。

使用响应构建器

参考响应构建器章节。

2、 Fractal

Fractal是Dingo API默认的转化层,它提供了一系列有用的特性来保持数据的一致性。

使用Fractal之前建议好好阅读其官方文档。

全自动关联关系渴求式加载

当使用Fractal的内置功能嵌入关联关系时确保其命名和模型中的命名一致。扩展包会自动为你渴求式加载这些关联关系。

高级配置

Fractal以默认配置注册为默认转化层,要手动配置需要在服务提供者中实例化 Dingo\Api\Transformer\Adapter\Fractal实例:

$this->app['Dingo\Api\Transformer\Factory']->setAdapter(function ($app) {     return new Dingo\Api\Transformer\Adapter\Fractal(new League\Fractal\Manager, 'include', ',');});
Copier après la connexion

如果你使用的是Lumen可以在启动文件(bootstrap.php)中这么做:

app('Dingo\Api\Transformer\Factory')->setAdapter(function ($app) {    return new Dingo\Api\Transformer\Adapter\Fractal(new League\Fractal\Manager, 'include', ',');});
Copier après la connexion

通过响应构建器实现高级使用

与响应构建器相结合使用Fractal通常是从控制器返回数据的最佳方式。响应构建器上的 item、 collection和 paginator方法都可以接收额外参数用于自定义Fractal。

资源key

return $this->item($user, new UserTransformer, ['key' => 'user']);
Copier après la connexion

使用回调

Fractal转化层允许你注册一个创建资源之后触发的回调,这个回调接收 League\Fractal\Resource\Item或者 League\Fractal\Resource\Collection作为第一个参数, League\Fractal\Manager实例作为第二个参数。然后你可以使用这个回调在更复杂的层级上与资源进行交互。

最常见的使用案例就是设置分页游标或者修改响应串行:

return $this->collection($users, new UserTransformer, [], function ($resource, $fractal) {    $resource->setCursor($cursor);});
Copier après la connexion

如果你不想传递资源key参数可以省略这个空数组:

return $this->collection($users, new UserTransformer, function ($resource, $fractal) {    $fractal->setSerializer(new CustomSerializer);});
Copier après la connexion

3、自定义转化层

如果你想对数据转化进行更多的自定义,可以在Dingo API中实现自己的转化层。这需要创建一个实现 Dingo\Api\Contract\Transformer\Adapter的类并且实现 transform方法:

use Dingo\Api\Http\Request;use Dingo\Api\Transformer\Binding;use Dingo\Api\Contract\Transformer\Adapter;class MyCustomTransformer implements Adapter{    public function transform($response, $transformer, Binding $binding, Request $request)    {        // Make a call to your transformation layer to transformer the given response.    }}
Copier après la connexion

transform是唯一必须的方法,你可以自由添加自己想要的其他方法。 transform方法的目的是获取 $response,然后和 $transformer一起传递给转化层处理,然后转化层会返回一个数组,最终这个数组被 transform方法返回。如果你的转化层很简单,可以完全在这个类中实现所有逻辑。

$bindings参数在你的转化层包含更多特性比如添加元数据或者允许开发者通过回调与转化层交互时很有用。

$request参数是当前被执行的HTTP请求,当你的转化层需要查询字符串参数或者其他相关数据时很有用。

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

PHP Logging: meilleures pratiques pour l'analyse du journal PHP PHP Logging: meilleures pratiques pour l'analyse du journal PHP Mar 10, 2025 pm 02:32 PM

La journalisation PHP est essentielle pour surveiller et déboguer les applications Web, ainsi que pour capturer des événements critiques, des erreurs et un comportement d'exécution. Il fournit des informations précieuses sur les performances du système, aide à identifier les problèmes et prend en charge le dépannage plus rapide

Travailler avec les données de session Flash dans Laravel Travailler avec les données de session Flash dans Laravel Mar 12, 2025 pm 05:08 PM

Laravel simplifie la gestion des données de session temporaires à l'aide de ses méthodes de flash intuitives. Ceci est parfait pour afficher de brefs messages, alertes ou notifications dans votre application. Les données ne persistent que pour la demande ultérieure par défaut: $ demande-

Curl dans PHP: Comment utiliser l'extension PHP Curl dans les API REST Curl dans PHP: Comment utiliser l'extension PHP Curl dans les API REST Mar 14, 2025 am 11:42 AM

L'extension PHP Client URL (CURL) est un outil puissant pour les développeurs, permettant une interaction transparente avec des serveurs distants et des API REST. En tirant parti de Libcurl, une bibliothèque de transfert de fichiers multi-protocol très respectée, PHP Curl facilite Efficient Execu

Misque de réponse HTTP simplifié dans les tests Laravel Misque de réponse HTTP simplifié dans les tests Laravel Mar 12, 2025 pm 05:09 PM

Laravel fournit une syntaxe de simulation de réponse HTTP concise, simplifiant les tests d'interaction HTTP. Cette approche réduit considérablement la redondance du code tout en rendant votre simulation de test plus intuitive. L'implémentation de base fournit une variété de raccourcis de type de réponse: Utiliser illuminate \ support \ faades \ http; Http :: faux ([[ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

12 meilleurs scripts de chat PHP sur Codecanyon 12 meilleurs scripts de chat PHP sur Codecanyon Mar 13, 2025 pm 12:08 PM

Voulez-vous fournir des solutions instantanées en temps réel aux problèmes les plus pressants de vos clients? Le chat en direct vous permet d'avoir des conversations en temps réel avec les clients et de résoudre leurs problèmes instantanément. Il vous permet de fournir un service plus rapide à votre personnalité

Expliquez le concept de liaison statique tardive en PHP. Expliquez le concept de liaison statique tardive en PHP. Mar 21, 2025 pm 01:33 PM

L'article traite de la liaison statique tardive (LSB) dans PHP, introduite dans PHP 5.3, permettant une résolution d'exécution de la méthode statique nécessite un héritage plus flexible. Problème main: LSB vs polymorphisme traditionnel; Applications pratiques de LSB et perfo potentiel

Frameworks de personnalisation / d'extension: comment ajouter des fonctionnalités personnalisées. Frameworks de personnalisation / d'extension: comment ajouter des fonctionnalités personnalisées. Mar 28, 2025 pm 05:12 PM

L'article examine l'ajout de fonctionnalités personnalisées aux cadres, en se concentrant sur la compréhension de l'architecture, l'identification des points d'extension et les meilleures pratiques pour l'intégration et le débogage.

See all articles