Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
J'ai créer un bout de code en ajax avec JQuery qui en cliquant sur un radio appel tel ou tel formulaire. Tout fonctionne parfaitement. D'ailleurs voici les codes :
Code JS qui appel les scripts (les views)
/* discoveredCustomer */ $ ( '.customerChoose' ) . click ( function ( ) { if ( $ ( this ) . val ( ) == 'new' ) { $.post ( 'newCustomer', {}, function ( response ){ var Html = $ ( response ); $ ( '#form' ) . append ( Html ); } ); } else if ( $ ( this ) . val ( ) == 'select' ) { alert ( 'old' ); } } );
Le code du controler
public function newcustomerAction ( ) { $this->view->idPartnerId = $this->_auth->id; $this->view->id = $this->_session->id; $this->_helper->getHelper('layout')->disableLayout(); }
et le script view qui est un formulaire tout ce qui a de plus simple.
Le souci est que lorsque j'appelle l'url suivante :
projectManagment/projects/newCustomer
Donc l'action qui est appelé dans le code JS, j'arrive à accéder à la page. Alors que je ne devrais pas pouvoir !
J'ai bien essayé de mettre un setNoRender mais du coup plus rien de s'affiche (je dirais que c'est plutôt normal ).
Je tiens à préciser que j'ai des permissions d'accès sur cette page des fois que cela vous aide.
Si vous pouviez m'aider, je vous en serais très reconnaissant.
Merci.
Bien cordialement.
Dernière modification par nicko (18-08-2009 08:04:57)
Hors ligne
Désolé si c'est pas très claire.
newCustomer correspond à une action et une vue. Avec mon JS, j'arrive à faire fonction mon action et ma vue. Ça s'affiche correctement !
Par contre, lorsque je tape l'url avec l'action newCustomer, j'accède à la vue qui est retournée en AJAX. Je souhaiterais que se sois pas possible puisque cette vue est propre à mon AJAX.
J'avais penser faire un :
$this->_helper->viewRenderer->setNoRender ( )
dans l'action et faire le formulaire en PHP mais c'est trop lourd ! Et j'ai une préférence pour que le code HTML soit dans view.
Est-ce que je suis plus claire ?
Encore merci de votre aide.
Hors ligne
L'idée est de ne rendre la vue que si la page est demandée en Ajax, et de ne pas la rendre si elle est demandée via la barre d'adresse ?
Je ne suis pas certain qu'il existe une manière fiable de sécuriser ainsi l'accès à la page.
Une approche basique serait d'ajouter un paramètre à ton URL (genre "?context=ajax") et de ne rendre la vue que lors de ce contexte. Toutefois cela ne garantit en rien qu'une saisie de l'URL avec ce paramètre via la barre d'adresse d'un navigateur ne retournerait rien. Et cela n'empêche pas non plus quiconque connaissant l'URL de pouvoir s'y rendre sans être passée par la page du formulaire.
Une autre approche pourrait être de générer une chaîne de caractère (ex: timestamp, valeur aléatoire, ...) que tu gardes en mémoire (session ?) au chargement de ta page principale et lors de l'appel ajax tu transmets cette même chaîne à ton controleur, qui ne rendra la vue que si la chaîne existe en session. (cette approche assure que l'URL n'est pas unique, contrairement à l'idée du "contexte", assurant que l'ID ne peut pas être transmises à des tiers, seul la personne (ou robot ?! eheh) en cours de visionnage de la page pourra y accéder par la barre d'adresse directement.
Pas certain qu'il y est de solution magique. S'il y en a une toutefois je suis tout aussi intéressé que toi...
Hors ligne
Avec l'objet Requet tu peux vérifier s'il s'agit d'une requête Ajax. Va y jeter un coup d'oeil, car je ne me souvient plus de la méthode.
Hors ligne
@3uclide : isXmlHttpRequest()
Hors ligne
Merci beaucoup pour vos réponses. Je connaissais la méthode vaguement et je n'avais pas pensé l'utilisé comme ça.
Encore merci
Hors ligne
Approche bien plus intéressante que mes propositions, bon à savoir !
Juste pour information elle semble restreinte à Protoype et jQuery toutefois et l'objet Zend_Controller_Request_Http ne permettant pas l'enrichissement d'autres headers orientés 'ajax' il faudrait probablement surcharger sa méthode isXmlHttpRequest au besoin. A voir si nécessaire...
Hors ligne
Pages: 1