2.0.6上的Cakephp setaction渲染问题

时间:2012-08-28 13:21:53

标签: cakephp cakephp-2.0 cakephp-2.1

Cakephp分页呈现问题。我正在使用cakephp 2.0.6。当我尝试从其他动作渲染页面时它很好。但是,当我尝试转到下一页时,问题就开始了

我有以下功能

   public function admin_index() 
   {
       //Function listing 
   }

所有类型的用户(支持,员工等)都需要相同的功能。 所以我使用了setAction方法,如下所示

public function support_index() 
   {
        $this->setAction('admin_index');
        $this->render('admin_index');
   }

我的分页代码如下:

    echo $this->Paginator->prev('< ' . __('previous'), array(), null, array('class' => 'prev disabled'));

    echo $this->Paginator->numbers(array('separator' => ''));

    echo $this->Paginator->next(__('next') . ' >', array(), null, array('class' => 'next disabled'));

但是当我尝试按照以下网址进入下一页时

http://www.example.com/support/users/admin_index/page:2
http://www.example.com/employee/users/admin_index/page:2

但需要提供以下输出:

http://www.example.com/support/users/index/page:2
http://www.example.com/employee/users/index/page:2

问题是$ this-&gt; setAction('admin_index');我认为..任何人都有所帮助

2 个答案:

答案 0 :(得分:1)

我在以下文件lib/Cake/Controller/Controller.php

中进行了更改

在setAction方法中所做的更改现在运行良好。特别是2.0.6的问题

public function setAction($action) {
    $this->request->params['action'] = $action; //Commented this Line 
    $this->view = $action; //Commented this Line


    $this->request->action = $action; // Added this Line
    $args = func_get_args();
    unset($args[0]);
    return call_user_func_array(array(&$this, $action), $args);

}

答案 1 :(得分:0)

的setAction

内部将一个动作重定向到另一个动作。不像Controller :: redirect();

那样执行另一个HTTP请求

重定向是一个不同的术语,实际上当它重定向到另一个动作时,它将自动成为该动作,这就是为什么paginate不会更改url。

您可以使用以下代码代替使用setAction:

public function admin_index() 
{
    $this->set('data',$this->__paginatedata());

}

function __paginatedata(){
    $this->paginate = array('limit'=>5);
    $this->Model->recursive = 0;
    return $this->paginate();
}

public function support_index() 
{
    $this->set('data',$this->__paginatedata());
    $this->render('admin_index');
}