Skip to content

Latest commit

 

History

History
323 lines (249 loc) · 12.4 KB

request-handling.rst

File metadata and controls

323 lines (249 loc) · 12.4 KB

Gestion des requêtes

Le composant Request Handler est utilisé dans CakePHP pour obtenir des informations additionnelles au sujet des requêtes HTTP qui sont faites à votre application. Vous pouvez l'utiliser pour informer vos contrôleurs des process Ajax, autant que pour obtenir des informations complémentaires sur les types de contenus que le client accepte et modifie automatiquement dans le layout approprié, quand les extensions de fichier sont disponibles.

Par défaut, Le RequestHandler détectera automatiquement les requêtes Ajax basée sur le header HTTP-X-Requested-With, qui est utilisé par de nombreuses librairies javascript. Quand il est utilisé conjointement avec :phpRouter::parseExtensions(), RequestHandler changera automatiquement le layout et les fichiers de vue par ceux qui correspondent au type demandé. En outre, s'il existe un assistant avec le même nom que l'extension demandée, il sera ajouté au tableau d'assistant des Contrôleurs. Enfin, si une donnée XML/JSON est POST'ée vers vos Contrôleurs, elle sera décomposée dans un tableau qui est assigné à $this->request->data, et pourra alors être sauvegardé comme une donnée de modèle. Afin d'utiliser le Request Handler il doit être inclus dans votre tableau $components:

class WidgetController extends AppController {

    public $components = array('RequestHandler');

    // suite du contrôleur
}

Obtenir des informations sur une requête

Request Handler contient plusieurs méthodes qui fournissent des informations à propos du client et de ses requêtes.

$type peut être un string, un tableau , ou 'null'. Si c'est un string, la méthode accepts() renverra true si le client accepte ce type de contenu.Si c'est un tableau, accepts() renverra true si un des types du contenu est accepté par le client. Si c'est 'null', elle renverra un tableau des types de contenu que le client accepte. Par exemple:

class PostsController extends AppController {

    public $components = array('RequestHandler');

    public function beforeFilter () {
        if ($this->RequestHandler->accepts('html')) {
            // Ce code est exécuté uniquement si le client accepte les réponses 
            HTML (text/html) 
        } elseif ($this->RequestHandler->accepts('xml')) {
            // exécuté seulement si le client accepte seulement les réponse XML
        }
        if ($this->RequestHandler->accepts(array('xml', 'rss', 'atom'))) {
            // Executé si le client accepte l'un des suivants: XML, RSS ou Atom
        }
    }
}

D'autres méthodes de détections du contenu des requêtes:

Renvoie true si le client accepte le contenu WAP.

Toutes les méthodes de détection des requêtes précédentes peuvent être utilisée dans un contexte similaire pour filtrer les fonctionnalités destiné à du contenu spécifique.Par exemple, au moment de répondre aux requêtes AJAX, si vous voulez désactiver le cache du navigateur, et changer le niveau de débogage. Cependant, si vous voulez utiliser le cache pour les requêtes non-AJAX. , le code suivant vous permettra de le faire:

if ($this->request->is('ajax')) {
    $this->disableCache();
}
// Continue l'action du contrôleur

Obtenir des informations supplémentaires sur le client

Décoder automatiquement les données de la requête

Répondre aux requêtes

En plus de la détection de requêtes, RequestHandler fournit également une solution simple pour modifier la sortie de façon à ce que le type de contenu corresponde à votre application.

Profiter du cache de validation HTTP

2.1

Le modèle de cache de validation HTTP est l'un des processus utilisé pour les passerelles de cache, aussi connu comme reverse proxies , pour déterminer si elles peuvent servir une copie de réponse stockée au client. D'après ce modèle, vous bénéficiez surtout d'une meilleur bande passante, mais utilisé correctement vous pouvez aussi gagner en temps de processeur, et ainsi gagner en temps de réponse.

En activant le Composant RequestHandler RequestHandlerComponent dans votre contrôleur vous validerez le contrôle automatique effectué avant de rendre une vue. Ce contrôle compare l'objet réponse à la requête originale pour déterminer si la réponse n'a pas été modifiée depuis la dernière fois que le client a fait sa demande.

Si la réponse est évaluée comme non modifié, alors le processus de rendu de vues est arrêter, réduisant le temps processeur. Un no content est retourné au client, augmentant la bande passante. Le code de réponse est défini à 304 Not Modified.

Vous pouvez mettre en retrait ce contrôle automatique en paramétrant checkHttpCache à false:

public $components = array(
    'RequestHandler' => array(
        'checkHttpCache' => false
));

Utiliser les ViewClasses personnalisées

2.3

Quand vous utilisez JsonView/XmlView vous aurez envie peut-être de surcharger la serialization par défaut avec une classe View par défaut, ou ajouter des classes View pour d'autres types.

Vous pouvez mapper les types existants et les nouveaux types à vos classes personnalisées.

Vous pouvez aussi définir ceci automatiquement en utilisant la configuration viewClassMap:

public $components = array(
    'RequestHandler' => array(
        'viewClassMap' => array(
            'json' => 'ApiKit.MyJson',
            'xml' => 'ApiKit.MyXml',
            'csv' => 'ApiKit.Csv'
        )
));