Utilisation du solveur d’options Symfony dans WordPress
Oquery ()
{Y}
Renvoie une nouvelle requête wp \ U ($this – > 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… C’est là que nous commençons l’encodage défensif, nous vérifions si les clés de tableau sont définies, s’il s’agit d’un tableau ou d’une chaîne, ou nous continuons.
L’utilisation de classes n’aide 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 l’entré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 d’usine. À moins que la classe Factory n’ait été conçue pour résoudre ce problème, elle n’a fait qu’ajouter une complexité supplémentaire qui aurait pu être sautée. C’est 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 n’utilisons 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. L’utilisation de l’option 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 l’utiliser 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» = > « nombre de commentaires»,
« page ‘= > 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 d’initialisation 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 l’objet et exécute la requête via la gestion du constructeur. Les paramètres de la requête WP _ sont créés à l’aide d’une instance optionresolver définie dans la Sous – classe, par exemple un billet chaud. Paramètres = $paramètres;
$this – > option Parser = new option Parser ();
$this – > 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 – > args);
}
\/ * *
Obtenir des sujets
* *
Retourner le tableau
* \/
Getargs () Protected Function
{Y}
Renvoie $this – > optionsrolver – > resolve ($this – > args);
}
Maintenant qu’on l’a, faisons une règle. Ce sera notre appel public. Nous définissons post _ type comme une règle obligatoire. Nous vous 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 n’a pas de valeur par défaut et définissons – le comme un paramètre obligatoire. L’API 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 – > définir la valeur par défaut ([1]
« ordered by» = > like
Nt _ count ‘,
« page ‘= > 1,
« articles publiés par _ page» = > 15,
];
Ajouter le type post _ comme paramètre requis sans valeur par défaut
$this – > optionsrolver – > SET defined (‘post _ type’);
$this – > optionsrolver – > setrequired (‘post _ type’);
}
Voici comment utiliser cette classe:
‘ Publier \
$post = $Hot – > doquery () – > getquery () – > 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 l’auteur sélectionnés par l’ID utilisateur exprimé en entier, dans l’un des deux types de messages définis par la chaîne. Pour les exigences de l’auteur, définissez d’abord l’auteur comme défini en utilisant setdefined (), puis marquez – le comme obligatoire en utilisant setrequired (). C’est la même chose qu’avant. Mais c’est une autre exigence. Nous voulons que l’auteur soit représenté par un entier, l’ID utilisateur. Il s’agit d’une exigence stricte, mais elle nous évite d’écrire du Code supplémentaire pour traiter le nom d’utilisateur en tant que chaîne, l’ID utilisateur en tant que chaîne, l’utilisateur WP _ valide, l’utilisateur WP invalide ou l’id de propriété en tant qu’ID utilisateur valide, ou d’autres 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 – > SET defined (\
$this – > option Parser – > SET required (‘author’);
Exiger que le paramètre de l’auteur soit un entier
$this – > option Parser – > SET allowed type (‘author’, array (
« entier»
)); Si 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, c’est – à – dire un poste ou un article. Bon de commande