08-02-2014, 12:11 PM
L'idée est d'avoir une seule action. Par exemple imaginons un contrôleur Building qui a une action update. Peu importe qui l'appel, il fait le même boulot (le fameux tronc commun dont je parlais), il peut également faire des traitements spécifiques à la variante utilisée (disons par exemple que tu veux updater un compteur du nombre d'utilisation de l'API REST, mais ça pourrait être n'importe quoi). Ce qu'il retourne en réponse peut varier.
Un exemple d'action différentes selon le type de format/variantes (oui c'est du Rails, mais je pense que Symfony est assez proche pour que tu t'en inspires) :
Un exemple d'action différentes selon le type de format/variantes (oui c'est du Rails, mais je pense que Symfony est assez proche pour que tu t'en inspires) :
class BuildingsController < ApplicationController
# PATCH /buildings/:id.
def update
building = current_user.buildings.find(params[:id])
building.raise_level(params[:building][:level])
respond_to do |format|
format.json do
API.increment_uses_counter
if building.errors.any?
render(json: { status: 'error', errors: building.errors })
else
render(json: { status: 'success' })
end
end
# Sur l'interface responsive tu rediriges et tu ajoutes les éventuelles erreurs au "flashbag" pour les afficher.
format.html.responsive do
flash[:error] = building.errors if building.errors.any?
redirect_to(building_path(building))
end
# Sur l'interface classique, tu redirigie ou tu rends le formulaire de saisie (en cas d'échec).
format.html.none do
if building.errors.any?
render(ome_view)
else
redirect_to(building_path(building))
end
end
end
end
end