API : Contrôleurs
1Présentation
Comme vu dans la page de présentation de l'API, nous allons créer deux contrôleurs, l'un servant à retourner la liste des tags, l'autre proposant plusieurs actions relatives aux notes.
Comme vu dans la configuration de l'API, nous utilisons le plugin API, qui prend en charge l'authentification des accès à l'API (avec des paires de clés publiques/privées). Après authentification, ce plugin met à disposition les variables de template currentUser et currentUserId, qui peuvent être utilisées dans les contrôleurs.
En conjonction avec le plugin, nous utiliserons l'attribut Auth pour nous assurer que tous les accès aux contrôleur sont correctement authentifiés.
2Contrôleur Tag
Ce contrôleur est assez simple dans la mesure où il ne propose qu'une seule action.
<?php
use \Temma\Atttributes\Auth as TµAuth;
/** Contrôleur Tag. */
#[TµAuth]
class Tag extends \Temma\Web\Controller {
/** Action qui retourne la liste des tags de l'utilisateur courant. */
public function list() {
$this['json'] = $this->_loader->NoteDao->getTags($this['currentUserId']);
}
}
- Ligne 3 : Définition d'un raccourci pour l'attribut Auth.
- Ligne 6 : Utilisation de l'attribut Auth, pour que ce contrôleur ne soit utilisable qu'avec une authentification correcte.
- Ligne 7 : Définition du contrôleur Tag.
- Ligne 9 : Définition de l'action list.
- Ligne 10 : Récupération des tags liés aux notes de l'utilisateur courant. Ces tags sont passés à la vue JSON.
3Contrôleur Note
Ce contrôleur contient toutes les actions relatives à la gestion des notes.
<?php
use \Temma\Attributes\Auth as TµAuth;
/** Contrôleur Note. */
#[TµAuth]
class Note extends \Temma\Web\Controller {
/** Retourne la liste des notes de l'utilisateur courant. */
public function list() {
$this['json'] = $this->_loader->NoteDao->getNotes($this['currentUserId']);
}
/** Retourne le résultat d'une recherche à partir de critères. */
public function search() {
$tag = $_GET['tag'] ?? null;
$title = $_GET['title'] ?? null;
$this['json'] = $this->_loader->NoteDao->searchNotes($this['currentUserId'],
$tag, $title);
}
/**
* Retourne les données d'une note.
* @param int $id Identifiant de la note.
*/
public function get(int $id) {
$note = $this->_loader->NoteDao->getNote($id);
if ($note['userId'] != $this['currentUserId']) {
return $this->_httpError(403);
}
$this['json'] = $note;
}
/** Ajoute une nouvelle note. */
public function add() {
// récupération des paramètres
$title = $_GET['title'] ?? null;
$content = $_GET['content'] ?? null;
$tag = $_GET['tag'] ?? null;
if (isset($tag) && !is_array($tag))
$tag = [$tag];
// normalisation des tags
$tags = array_map(function($t) {
return \Temma\Utils\Text::urlize($t);
}, $tags);
// ajout de la note
$this['json'] = $this->_loader->NoteDao->create($this['currentUserId'],
$title, $content, $tag);
}
/**
* Met à jour une note.
* @param int $noteId Identifiant de la note
*/
public function update(int $noteId) {
// récupération de la note
$note = $this->_loader->NoteDao->getNote($id);
// vérification de l'autorisation
if ($note['userId'] != $this['currentUserId']) {
return $this->_httpError(403);
}
// récupération des paramètres
$title = $_GET['title'] ?? null;
$content = $_GET['content'] ?? null;
$tag = $_GET['tag'] ?? null;
if (isset($tag) && !is_array($tag))
$tag = [$tag];
// mise à jour de la note
$this->_loader->NoteDao->update($noteId, $title, $content, $tag);
$this['json'] = true;
}
/**
* Efface une note.
* @param int $noteId Identifiant de la note
*/
public function remove(int $noteId) {
// récupération de la note
$note = $this->_loader->NoteDao->getNote($id);
// vérification de l'autorisation
if ($note['userId'] != $this['currentUserId']) {
return $this->_httpError(403);
}
// effacement de la note
$this->_loader->NoteDao->remove($noteId);
$this['json'] = true;
}
}