Yii2 RESTE de la requête
Hy.
J'ai un ProductController qui s'étend de la yii\repos\ActiveController.
La Question est que comment puis-je faire des requêtes sur via requête HTTP GET.
Comme: http://api.test.loc/v1/products/search?name=iphone
Et le retour de l'objet contient tous les produits avec le nom iphone.
OriginalL'auteur Kedves Hunor | 2014-08-27
Vous devez vous connecter pour publier un commentaire.
Mise à JOUR: 29 Avril 2016
C'est une approche plus simple que celui que j'ai présenté dans la précédente mise à jour. Il est toujours à propos de l'implication de la de Recherche classe générée par gii. J'aime l'utiliser pour définir et maintenir l'ensemble de la recherche, de la logique en un seul endroit, comme l'utilisation de scénarios personnalisés, gérer les validations, ou qui impliquent des modèles connexes sur le processus de filtrage (comme dans cette exemple). Donc, je vais revenir à ma première réponse :
Alors assurez-vous que votre recherche est la classe à l'aide de
load($params,'')
au lieu deload($params)
ou bien ajoutez à cela le modèle classe:Qui devrait être suffisant pour avoir de vos demandes de recherche comme:
/produits?nom=iphone&mode=&tri=nom, prix
Mise à JOUR: 23 septembre 2015
C'est la même approche, mais par la mise en œuvre complète & solution de nettoyage :
Maintenant votre demande GET va ressembler :
/produits?nom=iphone
Ou même comme :
/produits?nom=iphone&mode=&tri=nom, prix
Remarque:
Si, au lieu de
/products?name=iphone
vous êtes à la recherche pour unl'action de la poignée de recherche ou de filtrage des requêtes comme :
/produits/search?nom=iphone
Ensuite, dans le code ci-dessus, vous aurez besoin de supprimer les actions en fonction avec l'ensemble de son contenu :
renommer :
indexDataProvider()
àactionSearch()
& enfin ajouter
'extraPatterns' => ['GET search' => 'search']
à votre yii\web\UrlManager::règles comme décritdans @KedvesHunor de réponse.
Original de réponse: 31 Mai 2015
Il y a un court chemin pour ce faire, si lors de l'utilisation de Gii pour générer CRUD pour votre modèle, vous avez défini un Modèle de Recherche de Classe, alors vous pouvez l'utiliser pour filtrer les résultats, tout ce que vous avez à faire est de remplacer la
prepareDataProvider
fonction deindexAction
à force de retourner leActiveDataProvider
instance retournée par lasearch
fonction de votre modèle de de recherche de classe plutôt que d'en créer un nouveau.À reprendre si votre modèle est Product.php & vous avez généré un ProductSearch.php comme un de recherche de classe, puis dans votre Contrôleur vous avez juste besoin d'ajouter ceci :
Puis de filtrer les résultats, votre url peut ressembler à ceci :
ou même comme ceci :
OriginalL'auteur Salem Ouerdani
Ok j'ai compris, il suffit de mettre ceci dans votre Contrôleur et modifier l'URL dans la configuration du routeur.
Et la règle de l'URL (edit)
Ok j'ai modifié. Désolé, je suis nouveau ici 😀
c'est génial, bienvenue
OriginalL'auteur Kedves Hunor
Je recommande de ne pas utiliser les Superglobales $_GET directement . Au lieu de cela, vous pouvez utiliser Yii::$app->request->get().
Est le suivant comment vous pouvez créer une recherche générique de l'action et de l'utiliser dans le contrôleur.
Au contrôleur Fin
De La Recherche Personnalisée De L'Action
OriginalL'auteur Rx Seven
Dans Config/web.php -> Add 'extraPatterns' => ['GET search' => 'recherche']
**Dans le Reste de l'Api Contrôleur :- Moduels/v1/controllers/**
basicinfo :- Est-ce que le Nom du contrôleur , le Nom et l'âge est votre Nom des Champs.vous pouvez ajouter tous les paramètres existent dans votre tableau.
Recherche des URL de ce type :- basicinfo/search?nom=yogi&age=12 à 23
Inclure l'utilisation yii\data\ActiveDataProvider;
OriginalL'auteur Gaurav verma