JeuWeb - Crée ton jeu par navigateur
Controller selon le type de requête ? - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Controller selon le type de requête ? (/showthread.php?tid=6629)



Controller selon le type de requête ? - SorenS - 02-02-2013

Hello,

J'ai une petite question qui est orientée Symfony2 à la base, mais vu que c'est plus par rapport à HTTP ça peut se mettre pour tout Wink

Voilà, pour gérer un formulaire, vous utiliseriez quelle solution dans votre controller ?

Un controller unique, dans ce genre :


public function newAction(Request $request)
{
$task = new Task();

$form = $this->createFormBuilder($task)
->add('task', 'text')
->add('dueDate', 'date')
->getForm();

if ($request->getMethod() == 'POST') {
$form->bindRequest($request);

if ($form->isValid()) {

return $this->redirect($this->generateUrl('task_success'));
}
}

}

Ou alors, deux methodes, une gérant le GET et l'autre le POST selon l'url ? (permettant de séparer encore plus en fait)

Je vois énormément la première solution, mais je trouve la seconde pas mal "classe". On est dans le web, il faut s'appuyer sur les quelques forces de HTTP non ?

A vos avis Wink


RE: Controller selon le type de requête ? - Sephi-Chan - 02-02-2013

Effectivement, on en parlait également le récent sujet de Holy sur son apprentissage de Ruby on Rails.

J'opterais pour la solution de deux actions séparées, qui rend le code plus simple à comprendre. En conception orienté objet, on conseille d'éviter les conditions au profit du polymorphisme. Ça y ressemble pas mal ici. Smile


Avec Rails, ça donne quelque chose comme ça :


class TasksController < ApplicationController
# GET /tasks/new affiche le formulaire de création.
def new
@task = Task.new
end


# POST /tasks traite le formulaire de création.
def create
if @task = Task.create(params[:task])
redirect_to @task
else
render :new
end
end
end



RE: Controller selon le type de requête ? - SorenS - 02-02-2013

En effet j'avais vu le sujet. Mais j'ai toujours autant de mal avec la syntaxe ruby ^^ Wink

On est d'accord en tout cas


RE: Controller selon le type de requête ? - niahoo - 02-02-2013

Pareil je filtre selon le type de requêtes

-module(login_controller).

-export([index/3]).

-include("./include/debugtools.hrl").

index('GET', _, Req) ->
{ok, HTML} = login_dtl:render(),
{ok, HTML, Req};

index('POST', _, Req) ->

{PostVals, Req2} = cowboy_http_req:body_qs(Req),
_Email = proplists:get_value(<<"email">>, PostVals),
_Password = proplists:get_value(<<"password">>, PostVals),

%% pour le moment on simule la connexion validée

Token = cowboy_cookies:cookie(
<<"persistence_token">>,
<<"test-token-2">>,
[{max_age, 3600 * 24 * 30}]
),

{ok, [Token], Out, Req2}.

(bon c'est un mockup hein y a pas vraiment de login pour le moment)


RE: Controller selon le type de requête ? - MicroNotSoft - 02-02-2013

Pour ceux que ça intéresse, cette vidéo est super sympa pour en apprendre plus sur REST et comment optimiser ses controlleurs. http://vimeo.com/17785736