Controller Action在Zend Framework中以不同方式调用

时间:2012-02-16 07:51:23

标签: zend-framework jquery zend-paginator

我的控制器操作

public function abcsajaxAction(){
  $start_date = $this->_getParam('start_date');
  $end_date   = $this->_getParam('end_date');


  $myquery; //myquery
  //zend pagination
  }

我从这里称这个动作是指我的js

$("#show_history_call_logs").click(function(){
 var pass = true;
 var start_date    = $("#start_date").val();
 var end_date      = $("#end_date").val();
 var page_to_get   = $('input[name=hidden]').val();

 //some validation
 if(pass == true){
var href= "http://localhost/abc/xyz/index.php/login/"+page_to_get+"/";
var data ='start_date=' + start_date + '&end_date=' + end_date + '&option_call_log=' + option_call_log + '&option_call_log_asc_desc=' + option_call_log_asc_desc;
 $.ajax({ type: "GET",
           url: href,
          data: data,
          success: function(response){
           $('#paged-data-container').html(response);
            }
           });
           return false;
        }

现在我的意思是这个事件        $("#show_history_call_logs").click()

每次都很好 但正如我所说的那样,在这个行动中也存在分页所以现在当我点击任何分页时他们就会去做这个动作但是因为他们没有得到这些

$start_date = $this->_getParam('start_date');
$end_date   = $this->_getParam('end_date');

在这种情况下,它给我这个错误

Message: SQLSTATE[HY093]: Invalid parameter number: no parameters were bound

在另一方面,他们通过事件得到了我的意思。 所以我应该如何去,以便它在两个场景中都有效。

2 个答案:

答案 0 :(得分:0)

我不明白你想要达到的目标。您的SQL查询中有开始日期和结束日期。所以你应该

  • 设置参数
  • 重写您的查询,以便在不存在的情况下不考虑日期

例如以这种方式

  

$start_date = $this->_getParam('start_date', null);

     

...

     

$sql = $this->select()->from(x);

     

if(!empty($startDate)) {

     

$sql->where('start_date < ?', $startDate)

     

}

答案 1 :(得分:0)

未经测试,但尝试可能有效

if(empty($start_date) && empty($end_date)){
$select = $registry['select']; 
   }
else{
      $select; //your new query
 }

 if(!empty($start_date) && !empty($end_date)){
   Zend_Registry::set('select',$select);
  }