CakePHP分页不能超过第一页


CakePHP pagination not working beyond 1st page

我有一个视图在我的网站,有两个div。一个包含搜索框,另一个显示搜索结果。默认情况下,结果div上不加载任何内容。只有当通过post请求进行搜索时,才填充结果div。然而,这导致了分页功能的问题,因为第二次加载页面时,它没有足够的数据来列出其余的结果。如何修改控制器/视图以满足此需求?

我在控制器中的动作:

public function search(){
        if($this->request->is('post')){
            if($this->request->data['User']['search']!=null){
                $search_name=$this->request->data['User']['search'];
                $this->Paginator->settings = array(
                    'conditions'=>array('User.name LIKE'=>'%'.$search_name.'%'),
                    'order' => array('User.datetime' => 'desc'),
                    'limit' => 10
                );
                $feed = $this->Paginator->paginate('User');
                $this->set('search_result',$feed);
            }
            else{
                $this->Session->setFlash(__("Cant make an empty search"));
                return $this->redirect(array('action'=>'search'));
            }
        }
    }

我的观点:

<?php
include 'header.ctp';
echo '<div id="feed">';
echo $this->Form->create(null, array('url' => array('controller' => 'users', 'action' => 'search')));
echo $this->Form->input('search');
echo $this->Form->end('Search');
echo 'search by name';
echo '</div>';
if(isset($search_result)){
    echo '<div id="tweet_records">';
    if(!empty($search_result)){
        foreach ($search_result as $user) : 
            $formatted_text;
            $latest_tweet_time;
            $formatted_time;
            if(!empty($user['Tweet'])){
                $formatted_text=$this->Text->autoLinkUrls($user['Tweet']['0']['tweet']);
                $latest_tweet_time=$user['Tweet']['0']['datetime'];
                $formatted_time;
                if(strlen($latest_tweet_time)!=0){
                    $formatted_time='Tweeted at '.$latest_tweet_time;
                }
                else{
                    $formatted_time='No tweets yet';    
                }
            }
            else if(empty($user['Tweet'])){
                $formatted_text='No tweets yet';
                $formatted_time='';     
            }
            echo '<table id="t01">';
            echo'<tr>';
            echo '<td>'.
                 $user['User']['name'].'@'.$this->HTML->link($user['User']['username'], array('controller'=>'tweets','action'=>'profile',$user['User']['id'])).'<br>'.$formatted_text.'&nbsp;'.'<br>'.'<font color="blue">'.$formatted_time.'</font>';
                 echo '<div id="delete">';
                 $selector='true';
                 foreach ($user['Follower'] as $follower) :
                    if($follower['follower_user_id']==AuthComponent::user('id')){
                        $selector='false';
                        echo $this->Form->postlink('Unfollow',array('controller'=>'followers','action'=>'unfollow',$user['User']['id']),array('confirm'=>'Do you really want to unfollow this person?'));
                    }
                 endforeach;
                 if($selector=='true' & $user['User']['id']!=AuthComponent::user('id')){
                    echo $this->Form->postlink('Follow',array('controller'=>'followers','action'=>'follow',$user['User']['id']));
                 }
                 echo '</div>';
                 echo '</td>';

            echo '</tr>';
        endforeach;
        echo'</table>';

        echo 'Pages: ';
        echo $this->Paginator->prev(
          ' < ',
          array(),
          null,
          array('class' => 'prev disabled')
        );
        echo $this->Paginator->numbers();
        echo $this->Paginator->next(
            ' > ' , 
            array(), 
            null, 
            array('class' => 'next disabled')
        );
    }
    else{
        echo '<font color="red"> No results found </font>';
    }
    echo '</div>';
}

您只在post请求中搜索结果。但是当你按下一个按钮时,你就发出了get请求。第一个if语句没有返回true所以你没有向视图传递任何数据。

即使你为post删除了第一个if语句,你仍然不会看到任何数据,因为下一个按钮没有发布任何数据来实现第二个语句。

PS:

在CakePHP上,包含并不是一件可取的事情。你也没有提到你正在使用的版本