2010-01-31 60 views
0

我目前使用zend框架和使用jquery和php。尝试实现自动检查用户名可用性。使用zend框架调用函数

对于下面的代码,我需要调用我的user_availability.php这是在我的控制器文件夹。我做了/ controllers/user_availability,../user_availability,但它没有调用该页面。谁能帮忙?

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

您能否提供其他信息。 user_availability.php结构如何?也许你可以发布该文件的内容。 – user250120 2010-02-07 20:25:11

回答

0

,如果你忠实地想打电话与Zend框架的纯PHP文件,那么你需要把你的公共文件夹内,并把它作为/user_availability.php,但几乎可以肯定应该是更好地使用户可用性您的控制器之一

+0

所以,如果让我说我有一个checkcontroller.php位于我的控制器和我的useravailability是在该页面的功能。我怎么称呼它? $。员额( “checkcontroller.php”,{USER_NAME:$(本).VAL()},功能(数据) 因为这不工作或者.. – Ryan 2010-01-31 15:22:13

+0

你可以发布你的控制器的代码段, ?/或您的Zend应用布局 – roman 2010-01-31 16:27:20

+0

类UsercheckController扩展化Zend_Controller_Action { \t \t \t公共职能的indexAction(){\t \t \t \t $查看=合适的词汇::得到( '查看'); \t \t \t $视图 - > render('register2.tpl'); \t \t $ users = new Users(); \t \t $ username = $ _POST ['username']; \t \t require_once'Zend/Db.php'; \t \t $ DB2 = Zend_Db的::工厂( 'PDO_MYSQL',阵列( \t \t \t '主机'=> '127.0.0.1', \t \t \t '用户名'=> 'roseadmin', \t \t \t“密码” => 'test123', \t \t \t 'DBNAME'=> 'roseuser', \t \t \t '端口'=> '3306' \t \t)); \t \t \t 如果\t($用户 - > checkUnique($ _ POST [ '用户名'])){ \t \t回声 “失败”; \t \t \t \t \t \t \t \t \t } \t } } – Ryan 2010-02-01 03:31:38

0

查找到行动和视图助手(取决于你想调用从脚本)的作用。动作助手可以从控制器调用,并可以保存在... /项目/库中。

从你可以调用你写,并存储在... /项目名称/应用/视图/佣工自定义视图助手视图。

您可能需要调整你的代码,以适应框架内更好,但只是创建需要一个帮手(包括)的.PHP脚本应该工作。

View helpers (Survive the Deep End)

Action helpers (from the manual):

+0

我不太明白。我试图调用控制器的代码位于视图文件夹中。 – Ryan 2010-02-01 03:39:57

0

看来你正在做一个页面请求到非控制器项目。无论何时,当您在Zend Framework中发出请求时,它都会尝试将请求的URL与系统中的路由相匹配,这与控制器操作相对应。所有这些都是通过您的应用程序的index.php文件处理的 - 直接提供其他php文件的唯一方法是通过公用文件夹。

我的建议是创建检查一个Ajax请求,并在你的选择(XML,JSON)的格式返回的东西(而不是渲染HTML模板)的控制器操作。

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

}

+0

我确实创建了控制器操作。但它只是不叫它。我从视图文件夹调用,该模板使用.tpl。这很重要吗? – Ryan 2010-02-01 03:43:23

0

谢谢大家。我找到了解决办法。

你只需要把功能的控制器页面并调用该函数的名称。

e.g:

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

然后在你的控制器文件checkusername可用性确保您添加检查功能。

0

我的控制器页面如下代码:

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

在这种情况下,checkUnique只是一个SQL语句在我的模型控制器检查,如果用户名存在。

对于我的jQuery代码是:

$("#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); 
      }); 
     } 
    }); 
}); 

我从这个链接下面的例子:

http://roshanbh.com.np/2008/04/check-username-available-ajax-php-jquery.html。请看看它。我希望它有帮助。 =)