Utilisation du solveur d’options Symfony dans WordPress

Oquery ()
{Y}
Renvoie une nouvelle requête wp U ($this gt Parameter)
}
Les constructeurs de cette classe utilisent WP _ parse args pour fusionner les paramètres de requête WP avec les valeurs par défaut. Laisse le travailler. Mais si nous devions devenir plus complexes, nous pourrions commencer à avoir des problèmes de dactylographie: de nombreux sujets peuvent être des entiers non analysés, des chaînes, des tableaux, des variables de requête Crsquoest là que nous commençons lrsquoencodage défensif, nous vérifions si les clés de tableau sont définies, srsquoil srsquoagit drsquoun tableau ou drsquoune chaîne, ou nous continuons.
Lrsquoutilisation de classes nrsquoaide pas à gonfler le Code. Chaque classe sera maintenant responsable de ses principales responsabilités et de la gestion des contrôles de type complexes et de la vérification des intrants. Cela est contraire au principe de la responsabilité individuelle. Nous pouvons simplement supposer que lrsquoentrée est correcte et transférer la responsabilité à un ou plusieurs autres endroits, ce qui peut entraîner une duplication du Code. Ou on pourrait mettre la logique dans une classe drsquousine. À moins que la classe Factory nrsquoait été conçue pour résoudre ce problème, elle nrsquoa fait qursquoajouter une complexité supplémentaire qui aurait pu être sautée. Crsquoest comme ça que fonctionne le Code lasagne.
De plus en plus ennuyeux et stupide. Le problème que nous étudions n’est pas unique à WordPress. Nous nrsquoutilisons que les composants Symfony pour résoudre ce problème. Ce composant est le composant optionsresolver. Optionsresolver est appelé Array _ Merge () sur les stéroïdes. Lrsquoutilisation de lrsquooption par défaut optionsresolver optionsresolver est essentiellement destinée à compléter tout ce que Wp _ parse args fait. Cela signifie que, dans la pratique, nous pouvons simplement lrsquoutiliser comme substitut. Voici une nouvelle version de notre billet populaire qui remplace WP _ parse args par optionsresolver pour accomplir la même tâche:
Définir les valeurs par défaut
« trier par» = gt « nombre de commentaires»,
« page lsquo= gt 1,
Nous créons un système pour créer des instances de requête WP _ basées sur des règles bien définies. Commençons par créer une classe abstraite appelée post. Nous voulons que la Sous classe post ne soit responsable que de la mise en place de la règle WP _ Query args.
Nous voulons que la Sous classe post ait une méthode drsquoinitialisation des options. La méthode est marquée comme abstraite dans la classe de base afin que des sous classes soient nécessaires pour la fournir. Post définit les propriétés de lrsquoobjet et exécute la requête via la gestion du constructeur. Les paramètres de la requête WP _ sont créés à lrsquoaide drsquoune instance optionresolver définie dans la Sous classe, par exemple un billet chaud. Paramètres = $paramètres
$this gt option Parser = new option Parser ()
$this gt Initialize options ()
}
* *
Solution pour initialiser les options
*
Fonction de protection abstraite initioptions ()
* *
Obtenir une requête
* *
Exécution de la requête de raison et analyse des paramètres
* *
Retour à la requête
*
Getquery () fonction publique
{Y}
Renvoie une nouvelle requête ($this gt args)
}
* *
Obtenir des sujets
* *
Retourner le tableau
*
Getargs () Protected Function
{Y}
Renvoie $this gt optionsrolver gt resolve ($this gt args)
}
Maintenant qursquoon lrsquoa, faisons une règle. Ce sera notre appel public. Nous définissons post _ type comme une règle obligatoire. Nous demandons de choisir le type de post au lieu de fournir les valeurs par défaut fournies par WordPress.
Nous avons vu comment ajouter des paramètres par défaut. Regardons maintenant un paramètre qui nrsquoa pas de valeur par défaut et définissons le comme un paramètre obligatoire. LrsquoAPI options resolver est écrite très clairement. Nous utilisons la méthode setdefined () pour définir et argumenter, et la méthode setrequired pour forcer son utilisation. Voici notre nouveau popularpost: Option resolver gt définir la valeur par défaut ([1]
« ordered by» = gt like
Nt _ count lsquo,
« page lsquo= gt 1,
« articles publiés par _ page» = gt 15,
]
Ajouter le type post _ comme paramètre requis sans valeur par défaut
$this gt optionsrolver gt SET defined (lsquopost _ typersquo)
$this gt optionsrolver gt setrequired (lsquopost _ typersquo)
}
Voici comment utiliser cette classe:
lsquo Publier
$post = $Hot gt doquery () gt getquery () gt get _ Post () Validons les types et les valeurs une fois de plus pour voir comment nous pouvons utiliser optionsresolver. Pour ce faire, nous créerons authorpost, une collection de messages de lrsquoauteur sélectionnés par lrsquoID utilisateur exprimé en entier, dans lrsquoun des deux types de messages définis par la chaîne. Pour les exigences de lrsquoauteur, définissez drsquoabord lrsquoauteur comme défini en utilisant setdefined (), puis marquez le comme obligatoire en utilisant setrequired (). Crsquoest la même chose qursquoavant. Mais crsquoest une autre exigence. Nous voulons que lrsquoauteur soit représenté par un entier, lrsquoID utilisateur. Il srsquoagit drsquoune exigence stricte, mais elle nous évite drsquoécrire du Code supplémentaire pour traiter le nom drsquoutilisateur en tant que chaîne, lrsquoID utilisateur en tant que chaîne, lrsquoutilisateur WP _ valide, lrsquoutilisateur WP invalide ou lrsquoid de propriété en tant qursquoID utilisateur valide, ou drsquoautres objets de classe standard. Pour cette dernière exigence, nous pouvons utiliser la méthode setallowedtypes () pour spécifier que seuls les entiers et les entiers peuvent être utilisés au lieu de faire face à tous ces comportements fous. Option resolver gt SET defined (
$this gt option Parser gt SET required (lsquoauthorrsquo)
Exiger que le paramètre de lrsquoauteur soit un entier
$this gt option Parser gt SET allowed type (lsquoauthorrsquo, array (
« entier»
)) nous voulons autoriser les chaînes numériques ou les objets utilisateurs WP _ plus tard, nous pouvons le faire. On a juste besoin de changer quelque chose. Une autre exigence que nous créons est que le type de poste doit être un seul type de poste, crsquoest à dire un poste ou un article. Bon de commande

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

ContactPress Supported By WordPress Plugins