2010-01-31 5 views
0

J'utilise actuellement zend framework et je travaille avec jquery et php. Essayer d'implémenter une disponibilité de nom d'utilisateur autocheck.Appeler une fonction en utilisant le framework zend

Pour le code suivant, je dois appeler mon user_availability.php qui se trouve dans mon dossier de contrôleur. J'ai fait/controllers/user_availability, ../user_availability mais il n'appelle pas cette page. Quelqu'un peut-il aider?

$.post("user_availability.php",{ user_name:$(this).val() } ,function(data) 
+0

Pourriez-vous fournir des informations supplémentaires. Comment est structuré user_availability.php? Peut-être que vous pouvez poster le contenu de ce fichier. – user250120

Répondre

0

si vous voulez vraiment appeler un fichier PHP avec Zend Framework, alors vous devez le mettre dans votre dossier public et l'appeler comme /user_availability.php mais il devrait certainement être préférable de faire par l'utilisateur disponibilité une action de l'un de vos contrôleurs

+0

Donc, si je le dis, j'ai un checkcontroller.php situé dans mon contrôleur et mon useravailability est une fonction dans cette page. Comment je l'appelle? $ .post ("checkcontroller.php", {nom_utilisateur: $ (this) .val()}, fonction (données)? Parce que cela ne fonctionne pas non plus .. – Ryan

+0

pouvez-vous poster un extrait de code de vos contrôleurs et ?/ou votre mise en page de l'application zend – roman

+0

classe UsercheckController extends Zend_Controller_Action { \t \t \t fonction publique indexAction() {\t \t \t \t $ view = Zend_Registry :: get ('view'); \t \t \t $ view-> render ('register2.tpl'); \t \t $ users = new Utilisateurs(); \t \t $ username = $ _POST ['nom d'utilisateur']; \t \t require_once 'Zend/Db.php'; \t \t $ db2 = Zend_Db :: factory ('pdo_mysql', array ( \t \t \t 'hôte' => '127.0.0.1', \t \t \t 'username' => 'roseadmin', \t \t \t ' mot de passe »=> 'test123', \t \t \t 'dbname' => 'roseuser', \t \t \t 'port' => '3306' \t \t)); \t \t \t \t if ($ utilisateurs-> checkUnique ($ _ POST [ 'username'])) {echo \t \t "fail"; \t \t \t \t \t \t \t \t \t} \t }} – Ryan

0

Regardez dans Action et View Helpers (selon l'endroit d'où vous voulez appeler le script). Les assistants d'action peuvent être appelés depuis les contrôleurs et peuvent être conservés dans un .../projet/bibliothèque. A partir d'une vue, vous pouvez appeler une aide à la vue personnalisée que vous avez écrite et stockée dans .../nomprojet/application/vue/helpers.

Vous souhaiterez peut-être restructurer votre code pour qu'il corresponde mieux au cadre, mais il vous suffira de créer un assistant qui nécessite (doit) que votre script .php fonctionne.

View helpers (Survive the Deep End)

Action helpers (from the manual):

+0

Je ne comprends pas très bien. Mon code qui tente d'appeler le contrôleur se trouve dans le dossier de vue. – Ryan

0

Il semble que vous faire une demande de page à un élément non-contrôleur. Chaque fois que vous faites une demande dans Zend Framework, il tentera de faire correspondre l'URL de la requête à une route dans le système, ce qui correspond à une action du contrôleur. Tout cela est géré via le fichier index.php de votre application - la seule façon de servir un fichier php différent serait directement dans votre dossier public.

Ma suggestion est de créer une action de contrôleur qui vérifie une requête Ajax et renvoie quelque chose dans votre format de choix (XML, json) (plutôt que de rendre un modèle HTML).

public function userAvailableAction() 
{ 
    if ($this->getRequest()->isXmlHttpRequest()) { 
     // check user availability 
     $this->_helper->json($data); 
    } 

}

+0

J'ai créé l'action du contrôleur. Mais ça ne l'appelle pas. J'appelle à partir du dossier de vue et ce modèle utilise .tpl. Est-ce important? – Ryan

0

Merci à tous. J'ai trouvé la solution.

Vous avez juste besoin de mettre la fonction dans la page du contrôleur et d'appeler le nom de la fonction.

par exemple:

$.post("check",{ user_name:$(this).val() } ,function(data) 

Ensuite, dans votre fichier contrôleur checkusername disponibilité assurez-vous d'ajouter la fonction de contrôle.

0

ma page de commande se présente comme suit le code:

class RegisterController extends Zend_Controller_Action { 
    public function checkAction(){ 
     $users = new Users(); 
     $username = $_POST['username']; 
     if($users->checkUnique($_POST['username'])){ 
      echo "fail"; 
     }   
} 

Dans ce cas, le checkUnique est juste une instruction SQL dans mon contrôleur de modèle pour vérifier si le nom d'utilisateur existe.

Pour mon code jquery il est:

$("#username").blur(function(){ 
    //remove all the class add the messagebox classes and start fading 
    $("#msgbox").removeClass().addClass('messagebox').text('Checking...').fadeIn("slow"); 
    //check the username exists or not from ajax 
    $.post("check",{ user_name:$(this).val() } ,function(data){ 
     if(data=='no'){ //if username not avaiable 
      $("#msgbox").fadeTo(200,0.1,function(){ //start fading the messagebox 
       //add message and change the class of the box and start fading 
       $(this).html('This User name Already exists').addClass('messageboxerror').fadeTo(900,1); 
      }); 
     }else { 
     $("#msgbox").fadeTo(200,0.1,function(){ //start fading the messagebox 
       //add message and change the class of the box and start fading 
       $(this).html('Username available to register').addClass('messageboxok').fadeTo(900,1); 
      }); 
     } 
    }); 
}); 

J'ai eu cet exemple de ce lien:

http://roshanbh.com.np/2008/04/check-username-available-ajax-php-jquery.html. Jetez un coup d'oeil à cela. J'espère que ça aide. =)

Questions connexes