recherche
Maisondéveloppement back-endtutoriel phpConstruisez des ressources de repos avec Laravel

Construisez des ressources de repos avec Laravel

Dans cette partie, nous commencerons à travailler avec l'interface de repos. Créer une API REST sur Laravel n'est pas très difficile. Tout ce que nous devons garder à l'esprit, c'est que nous avons affaire à Emberjs et que nous ne voulons pas écrire un nouvel adaptateur à partir de zéro. Comme d'habitude, vous pouvez trouver le code source de cette partie sur github.

Les plats clés

  • Utiliser les conventions Ember.js lors de la construction d'API REST avec Laravel pour assurer la compatibilité et rationaliser le processus de développement.
  • Créer des contrôleurs de ressources dans Laravel en utilisant l'outil de ligne de commande artisan pour gérer efficacement les ressources reposantes sans avoir besoin de définir manuellement les opérations CRUD.
  • Organisez efficacement les routes en les regroupant sous un espace de noms spécifique dans Laravel, en améliorant la structure et l'accessibilité de l'API.
  • Implémentez la gestion des erreurs et le formatage de réponse dans les contrôleurs pour gérer la récupération des données et assurer des points de terminaison API robustes.
  • Tirez parti des classes de ressources éloquentes et API de Laravel pour transformer les données du modèle en réponses JSON, facilitant une intégration facile avec des cadres frontaux comme Ember.js.

par où commencer?

C'est une question difficile. Ember a son propre flux de travail et sa logique. Si nous commençons à écrire notre repos avec cette logique à l'esprit, nous allons gagner du temps, nous aurons une belle architecture et quelque chose de réutilisable. Je pense qu'Ember a fait un bon choix avec leur architecture de repos. Jetez un œil à la façon dont Ember attend les données.

Supposons que nous voulons récupérer un utilisateur. Ember attend quelque chose comme ceci:

{
      "user": {
        "firstName": "firstName",
        "lastName": "lastName"
      }
    }

Si nous voulons récupérer une liste d'utilisateurs, Ember s'attendrait à un JSON comme ceci:

{
      "users": 
      [
          {
            "firstName": "firstPersonsName",
            "lastName": "lastname"
          },
          {
            "firstName": "secondPersonName",
            "lastName": "lastName"
          }
      ]
    }

Le premier nécessite «l'utilisateur», mais le second nécessite des «utilisateurs». Le second est pluriel. Ember a également mis des règles pour cela. Si vous ne spécifiez pas le pluriel vous-même en utilisant:

Ember.Inflector.inflector.irregular('formula', 'formulae');

Emberjs fera une hypothèse et demandera des «formules». Parfois, c'est bien que le cadre lui-même fournit de telles choses, mais d'autre part, les choses peuvent devenir incontrôlables si vous oubliez ces détails.

Avant de s'aventurer plus profondément avec Ember, un avertissement: Ember est difficile et puissant. Prenez le temps d'apprendre comment cela fonctionne.

Si nous complimons un peu les choses et mettons quelques relations entre les objets, par exemple, nous disons que l'utilisateur a des photos. Comment émenilions-nous cela?

{
      "user": {
        "id": 1,
        "name": "firstName",
        "lastname": "lastname,
        "photos": [1, 2, 3]
      },
    
      "photos": 
      [
          {
            "id": 1,
            "title": "Lorem Ipsum"
          },
          {
            "id": 2,
            "title": "Lorem Ipsum"
          }
      ]
    }

Il s'agit d'une relation un à plusieurs. Si nous demandons un utilisateur, ses photos seront également prises. Nous avons déjà mis en place des relations dans Laravel, vous pouvez les utiliser si vous voulez et consommer ces relations sur Ember aussi.

J'ai commencé avec Ember pour voir comment ce cadre veut les données. C'est plus facile si vous savez comment construire la structure. La validation et l'obtention des données de la base de données sont faciles, mais la création d'une interface de repos solide et une interface intelligente, c'est la partie difficile.

Préparation pour le reste

Lorsque vous développez quelque chose, une maquette peut être très utile. Même si vous êtes un programmeur de gourou et que vous détestez traiter avec Photoshop ou GIMP, il existe de bons outils pour le prototypage. J'ai utilisé Balsamiq et mon prototype en première page était le suivant:

Construisez des ressources de repos avec Laravel

Permet de commencer à le construire. Open /App/views/index.php. Cela sert de notre application à une seule page. Nous avons créé ce fichier dans la première partie de cette série.

{
      "user": {
        "firstName": "firstName",
        "lastName": "lastName"
      }
    }

Permettez-moi d'expliquer cela. La balise NAV est responsable de la navigation. La balise UL avec la zone de titre de classe est un texte qui est utilisé comme logo qui est lié au premier niveau de l'application. J'ai également ajouté une liste déroulante avec une liste de catégories. Dirigez-vous vers la Fondation 5 Docs si vous voulez en savoir plus. La plupart du temps, ce ne sont que des opérations de copie / coller, alors ne vous inquiétez pas pour cette partie.

De plus, j'ai utilisé le système de grille de Foundation pour la zone de contenu. Cela serait rempli de toutes les informations et sera modifié lors de la navigation. Toutes les mises à jour internes seront gérées par Ember. Nous allons construire seulement 3 modèles ici. Un pour les utilisateurs, un pour une seule photo et un pour la page de destination.

Avez-vous remarqué que tout notre code se trouve dans une balise de script? Ember utilise le guidon comme langue de modèle. Le type de texte / handlebars est un type spécial de script. Si vous utilisez Ember and Grodbars pendant un certain temps, vous avez probablement utilisé des noms de modèles. Je ne les spécifie pas dans celui-ci car ce modèle sera utilisé comme conteneur pour toute l'application. Si vous ne spécifiez pas de nom, Ember l'utilise comme modèle d'application.

Les contrôleurs de ressources

Au fur et à mesure que j'ai développé cette application très simple, j'ai constaté que les contrôleurs de ressources sont utiles lors du développement d'API REST. C'est le point de l'architecture de repos - tout est une ressource. Toutes les ressources peuvent avoir un verbe HTTP appliqué: obtenir, publier, supprimer, mettre (mettre à jour). Tous les verbes ne sont pas nécessaires.

{
      "users": 
      [
          {
            "firstName": "firstPersonsName",
            "lastName": "lastname"
          },
          {
            "firstName": "secondPersonName",
            "lastName": "lastName"
          }
      ]
    }

C'est ainsi que nous créons un contrôleur de ressources via Artisan. L'option - à l'exception éteint ces deux méthodes de ce contrôleur. Nous n'avons pas besoin des méthodes de création et de modification. La méthode de création traite de l'interface graphique de la création de cette ressource. Au fur et à mesure que nous créons une application d'une page, il n'est pas sage de créer une vue à l'extérieur de Ember.

Créez un autre contrôleur de ressources pour les catégories. Comme vous pouvez le voir, seuls les méthodes d'affichage et d'index sont disponibles dans ce contrôleur. Je pense que montrer une catégorie individuelle et récupérer toutes les catégories est suffisant.

{
      "user": {
        "firstName": "firstName",
        "lastName": "lastName"
      }
    }

Un autre contrôleur est le contrôleur d'images. Pourquoi des images contrôleur si nous en avons déjà une? Parce que nous avons besoin d'un point final pour servir les images. Dropbox détient nos images, mais nous ne pouvons pas y accéder de l'extérieur. Si vous voulez rendre un dossier public, vous devez payer. C’est la première raison. La deuxième raison est que je ne veux pas que chaque image soit publique. En un mot, ce contrôleur saisira l'image de Dropbox et le servira au client.

{
      "users": 
      [
          {
            "firstName": "firstPersonsName",
            "lastName": "lastname"
          },
          {
            "firstName": "secondPersonName",
            "lastName": "lastName"
          }
      ]
    }

et le dernier mais non le moindre est le Controller User:

Ember.Inflector.inflector.irregular('formula', 'formulae');

la route

Maintenant que nous avons les contrôleurs, nous devons relier ces contrôleurs à leurs itinéraires connexes. Mettons à jour /app/routes.php. Tout d'abord, regrouvez-les dans un espace de noms d'URL en utilisant Route :: Groupe.

{
      "user": {
        "id": 1,
        "name": "firstName",
        "lastname": "lastname,
        "photos": [1, 2, 3]
      },
    
      "photos": 
      [
          {
            "id": 1,
            "title": "Lorem Ipsum"
          },
          {
            "id": 2,
            "title": "Lorem Ipsum"
          }
      ]
    }

Ici, nous avons spécifié un préfixe, l'espace de noms. Tout ce qui se trouve à l'intérieur de ce groupe est accessible comme ceci:

<script type="text/x-handlebars">
    
        <!-- The navigation top-bar -->
        <nav  data-topbar>

            <ul >
                <li >
                    <h1><a href="#">Photo Upload
                
            

            <section >

                <!-- Left Nav Section -->
                <ul >
                    <li >
                        <a href="#">Categories
                        <ul >
                            <li><a href="#">Category1
                            <li><a href="#">Category2
                            <li><a href="#">Category3
                            <li><a href="#">Category4
                        
                    
                

            

            <div >
            
        <!-- END Navigation -->
        
        <!-- Content -->
        <div style="margin-top: 50px;">
            <!-- The content will be here -->
        <!-- END Content -->

    </script>

De plus, nous pouvons spécifier des filtres à l'intérieur de ce groupe. Par exemple, vous pouvez ajouter un filtre Auth :: OnceBasic ('Username') ou en créer un et l'ajouter dans ce groupe. Vous pouvez également utiliser d'autres authentifications.

Ajoutez trois contrôleurs à l'intérieur de ce groupe. Photocontroller, UserController et catégorie contrôleur.

php artisan controller:make PhotoController --except=create,edit

Ajoutez le contrôleur d'images en dehors de ce groupe. Je ne pense pas que ce contrôleur ait besoin d'un espace de noms - les images sont des images et il est inutile de leur donner un espace de noms.

php artisan controller:make CategoryController --only=show,index

En fin de compte, le fichier /app/routes.php devrait ressembler à ceci:

php artisan controller:make ImagesController --only=show

Remarquez que les noms de ressources sont pluriels, en raison de l'exigence d'Ember.

remplir ces contrôleurs

Maintenant, nous pouvons commencer à construire quelque chose. Je ne vais pas tout couvrir ici parce qu'il est très difficile d'expliquer toutes les choses - pour en savoir plus en profondeur, voir cette série. Commençons par le contrôleur photo.

La méthode index () doit renvoyer les dernières photos de la base de données. Ici, nous pourrions faire de la pagination, mais je ne veux pas que les choses deviennent trop complexes. S'il y aura suffisamment d'intérêt pour les commentaires, nous mettrons à jour cette application dans un futur article.

php artisan controller:make UserController --only=show,index

Laissez-moi expliquer cela. J'ai inséré tout dans un essai, une prise et enfin bloquer. Si quelque chose ne va pas, renvoyez un JSON différent avec un code d'état.

<span>Route<span>::</span>group(array('prefix' => 'api/v1'), function()
</span>    <span>{
</span>        
    
    <span>});</span>

Cela prend 9 photos de la base de données. Ensuite, prenez chaque photo et affichez-la dans un tableau formaté qui sera converti au format JSON plus tard.

Si tout se passe bien ou si une exception n'est pas lancée par Eloquent, cela affiche la bonne sortie. Si vous souhaitez afficher un code d'état spécifique, assistez à chaque exception qui peut être lancée par éloquent et affichez le bon code d'état.

Remplissons la méthode Show () maintenant. Encore une fois, nous voulons récupérer toutes les informations sur la photo avec l'ID donné.

example.com/api/v1

Lors de la création de votre propre application, n'oubliez pas d'ajouter la validation à la saisie de l'utilisateur.

La logique de l'UserController est presque la même. Cette fois, nous demanderons le modèle utilisateur.

{
      "user": {
        "firstName": "firstName",
        "lastName": "lastName"
      }
    }

Tout est presque identique, seul le modèle et les champs changent. La sortie JSON. La méthode Show ressemblera à ceci:

{
      "users": 
      [
          {
            "firstName": "firstPersonsName",
            "lastName": "lastname"
          },
          {
            "firstName": "secondPersonName",
            "lastName": "lastName"
          }
      ]
    }

Cette fonction récupère un utilisateur avec l'ID donné.

Le dernier contrôleur avec lequel nous avons affaire est le Controller d'images. La logique est aussi simple que de saisir les images du système de fichiers et de les servir. C'est simple lorsque vous enregistrez des fichiers et récupérez avec le système de fichiers local ou le système de fichiers du serveur. Malheureusement, vous ne pouvez pas enregistrer des fichiers sur Heroku, donc vous utiliserons Dropbox et servir ces fichiers à partir de ce point final.

Importez le client Dropbox et l'adaptateur FlySystem. Si notre environnement est local, nous utiliserons FlySystem avec l'adaptateur local; Si l'environnement est la production, utilisez l'adaptateur Dropbox. Attribuez la classe FlySystem dans une variable privée à l'intérieur de ce contrôleur.

Ember.Inflector.inflector.irregular('formula', 'formulae');

La méthode Show servira ce fichier et la méthode Detrère supprimera ce fichier du système de fichiers. En utilisant cette bibliothèque, nous mettons un niveau d'abstraction dans notre application.

{
      "user": {
        "id": 1,
        "name": "firstName",
        "lastname": "lastname,
        "photos": [1, 2, 3]
      },
    
      "photos": 
      [
          {
            "id": 1,
            "title": "Lorem Ipsum"
          },
          {
            "id": 2,
            "title": "Lorem Ipsum"
          }
      ]
    }

La fonction destrust () est très simple. Sélectionnez simplement ce fichier en utilisant la méthode de suppression et en passant le nom du fichier à supprimer. Si le fichier n'est pas trouvé, retournez un 404.

<script type="text/x-handlebars">
    
        <!-- The navigation top-bar -->
        <nav  data-topbar>

            <ul >
                <li >
                    <h1><a href="#">Photo Upload
                
            

            <section >

                <!-- Left Nav Section -->
                <ul >
                    <li >
                        <a href="#">Categories
                        <ul >
                            <li><a href="#">Category1
                            <li><a href="#">Category2
                            <li><a href="#">Category3
                            <li><a href="#">Category4
                        
                    
                

            

            <div >
            
        <!-- END Navigation -->
        
        <!-- Content -->
        <div style="margin-top: 50px;">
            <!-- The content will be here -->
        <!-- END Content -->

    </script>

En fin de compte, l'imageController devrait ressembler à ceci:

php artisan controller:make PhotoController --except=create,edit

Le format que nous avons servi est HTML. Ok, c'est un peu bizarre. Nous voulions servir des images, pas HTML. Cependant, ce n'est pas un problème car le navigateur recherche le format de fichier et reconnaît comment utiliser ce fichier.

Allez-y et essayez de créer le catégorie contrôleur. Je l'ai laissé de côté comme un exercice pour vous.

tester l'API

Je dois admettre que je suis amoureux de phpstorm, et pour tester les API de repos, j'utilise un outil appelé REST Client. C'est une interface graphique qui simplifie les tests. Vous pouvez également utiliser Curl à partir du terminal si vous le souhaitez. Faisons quelques tests:

php artisan controller:make CategoryController --only=show,index

Et c'est ce qui est retourné:

Construisez des ressources de repos avec Laravel

avec le client de rest de phpstorm, je reçois le même résultat dans JSON.

Construisez des ressources de repos avec Laravel

Et si je veux voir les résultats dans un meilleur format, je peux simplement appuyer sur l'icône JS sur le côté gauche de l'outil et le client du reste me donne une représentation plus agréable.

Construisez des ressources de repos avec Laravel

Vous pouvez également tester d'autres verbes comme Supprimer et Poster. Allez-y et testez autant que vous le pouvez. Il existe d'autres clients que vous pouvez utiliser pour les tests: la console de repos et le facteur sont deux d'entre eux. Le premier est disponible uniquement sur Chrome, et le second, Postman, est disponible sur Chrome et Firefox. Postman semble plus simple et plus convivial. Allez-y et essayez-les.

Conclusion

Laravel simplifie nos travaux de construction d'API REST avec des contrôleurs de ressources. Nous avons vu comment l'interface doit être construite en utilisant des conventions Ember. Ember a choisi une bonne interface et en s'en tienant à cette logique, vous pouvez réutiliser facilement votre code sur d'autres plates-formes.

Dans cette partie, je me suis concentré davantage sur les concepts et je n'ai pas fait trop de codage. Le remplissage de toutes les méthodes et l'ajout de validation auraient étendu inutilement ce post, alors qu'il est déjà assez long et dans une longue série. Lors du développement, vous devez toujours valider l'entrée. Ne l'oubliez pas et testez, testez, testez. Les tests devraient être votre meilleur ami.

Dans le dernier épisode de cette série, nous allons tout rassembler dans une application en direct entièrement fonctionnelle.

Les questions fréquemment posées sur la création de ressources de repos avec Laravel

Comment créer un contrôleur de ressources dans Laravel?

Dans Laravel, vous pouvez créer un contrôleur de ressources à l'aide de l'outil de ligne de commande Artisan. La commande est PHP Artisan Make: Controller ContrônerName - Resource. Remplacez «ControLername» par le nom que vous souhaitez donner à votre contrôleur. Cette commande créera un contrôleur avec des méthodes pour toutes les opérations CRUD nécessaires. N'oubliez pas que le nom du contrôleur doit être sous forme singulière et devrait être un nom de classe PHP valide.

Quel est le but des ressources éloquentes de Laravel?

Laravel Les ressources éloquentes sont utilisées pour transformer votre Modèles ORM éloquents et collections de modèles au format JSON. Ceci est particulièrement utile lors de la construction d'API, car il vous permet de contrôler la forme et le format exact des données que vous souhaitez envoyer dans vos réponses API. Il fournit un moyen cohérent et gérable de contrôler la sortie des données.

Comment utiliser les ressources de l'API Laravel?

Pour utiliser les ressources API Laravel, vous devez d'abord créer une classe de ressources. Cela peut être fait en utilisant la commande Artisan Command PHP Artisan Make: Resource ResourceName. Une fois la classe de ressources créée, vous pouvez définir la transformation de la méthode TOARRAY de votre ressource. Pour retourner une ressource à partir d'un itinéraire, vous renvoyez simplement une nouvelle instance de la classe de ressources, en transmettant les données que vous souhaitez transformer.

Comment puis-je personnaliser les données renvoyées par une ressource Laravel?

Vous pouvez personnaliser les données renvoyées par une ressource Laravel en modifiant la méthode TOARRAY dans votre classe de ressources. La méthode TOARRAY est l'endroit où vous mappez les attributs du modèle éloquent à vos attributs de réponse API. Vous pouvez ajouter, supprimer ou modifier les attributs au besoin.

Quelle est la différence entre une ressource et une collection dans Laravel?

Dans Laravel, une classe de ressources représente un seul modèle qui doit être transformé en une structure JSON, tandis qu'une classe de collecte de ressources représente une collection des ressources. Une collection de ressources est utilisée pour transformer un tableau ou une collection de modèles en JSON.

Comment créer une collection de ressources dans Laravel?

Pour créer une collection de ressources dans Laravel, vous pouvez utiliser le Artisan Command Php Artisan Make: Resource ResourceCenameCollection - Collection. Cela créera une classe de collection de ressources où vous pouvez définir la transformation de la collection.

Comment retourner une collection de ressources à partir d'un itinéraire à Laravel?

pour renvoyer une collection de ressources à partir d'un itinéraire Dans Laravel, vous renvoyez simplement une nouvelle instance de la classe de collecte de ressources, transmettant la collection de modèles que vous souhaitez transformer.

Puis-je ajouter des métadonnées à une réponse des ressources dans Laravel?

Oui, vous pouvez ajouter des métadonnées à une réponse des ressources dans Laravel. Cela peut être fait en définissant une méthode avec la ressource. La méthode avec Retourne un tableau de méta-données que vous souhaitez inclure dans la réponse.

Comment gérer les attributs conditionnels dans les ressources Laravel?

Les ressources Laravel fournissent une méthode qui vous permet de Ajoutez conditionnellement les attributs à la réponse des ressources. La méthode quand accepte deux arguments: la condition qui détermine si l'attribut doit être inclus, et la valeur de l'attribut si la condition est vraie.

Puis-je utiliser des ressources Laravel avec la pagination?

Oui, les ressources Laravel fonctionnent parfaitement avec la pagination intégrée de Laravel. Lorsque vous paginez une requête éloquente de Laravel, Laravel renverra automatiquement une réponse JSON qui inclut les résultats paginés ainsi que les liens de pagination. Si vous souhaitez personnaliser la réponse paginée, vous pouvez utiliser une collection de ressources.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration
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
Travailler avec les données de session Flash dans LaravelTravailler avec les données de session Flash dans LaravelMar 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 RESTCurl dans PHP: Comment utiliser l'extension PHP Curl dans les API RESTMar 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 LaravelMisque de réponse HTTP simplifié dans les tests LaravelMar 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 Codecanyon12 meilleurs scripts de chat PHP sur CodecanyonMar 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

PHP Logging: meilleures pratiques pour l&amp;#39;analyse du journal PHPPHP Logging: meilleures pratiques pour l&amp;#39;analyse du journal PHPMar 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&#39;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

Comment s'inscrire et utiliser les fournisseurs de services LaravelComment s'inscrire et utiliser les fournisseurs de services LaravelMar 07, 2025 am 01:18 AM

Les fournisseurs de services et les fournisseurs de services de Laravel sont fondamentaux pour son architecture. Cet article explore les conteneurs de services, détaille la création du fournisseur de services, l'enregistrement et démontre l'utilisation pratique avec des exemples. Nous commencerons par un ove

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

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)
2 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
2 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
2 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌

Outils chauds

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

mPDF

mPDF

mPDF est une bibliothèque PHP qui peut générer des fichiers PDF à partir de HTML encodé en UTF-8. L'auteur original, Ian Back, a écrit mPDF pour générer des fichiers PDF « à la volée » depuis son site Web et gérer différentes langues. Il est plus lent et produit des fichiers plus volumineux lors de l'utilisation de polices Unicode que les scripts originaux comme HTML2FPDF, mais prend en charge les styles CSS, etc. et présente de nombreuses améliorations. Prend en charge presque toutes les langues, y compris RTL (arabe et hébreu) ​​et CJK (chinois, japonais et coréen). Prend en charge les éléments imbriqués au niveau du bloc (tels que P, DIV),

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

DVWA

DVWA

Damn Vulnerable Web App (DVWA) est une application Web PHP/MySQL très vulnérable. Ses principaux objectifs sont d'aider les professionnels de la sécurité à tester leurs compétences et leurs outils dans un environnement juridique, d'aider les développeurs Web à mieux comprendre le processus de sécurisation des applications Web et d'aider les enseignants/étudiants à enseigner/apprendre dans un environnement de classe. Application Web sécurité. L'objectif de DVWA est de mettre en pratique certaines des vulnérabilités Web les plus courantes via une interface simple et directe, avec différents degrés de difficulté. Veuillez noter que ce logiciel

Listes Sec

Listes Sec

SecLists est le compagnon ultime du testeur de sécurité. Il s'agit d'une collection de différents types de listes fréquemment utilisées lors des évaluations de sécurité, le tout en un seul endroit. SecLists contribue à rendre les tests de sécurité plus efficaces et productifs en fournissant facilement toutes les listes dont un testeur de sécurité pourrait avoir besoin. Les types de listes incluent les noms d'utilisateur, les mots de passe, les URL, les charges utiles floues, les modèles de données sensibles, les shells Web, etc. Le testeur peut simplement extraire ce référentiel sur une nouvelle machine de test et il aura accès à tous les types de listes dont il a besoin.