cakephp 2.9 上的分页器无法通过第 2 页

unable to passe page 2 by paginator on cakephp 2.9

我目前遇到了一个小问题。让我解释 : 我在cakphp 2.9下开发了一个数据库 我使用了自定义搜索功能,问题是当我点击下一页时出现错误(第一页显示无忧) 这是我的控制器页面:UsersController.php

public function search_club()
{
    if (!empty($this->request->data)) {
        $info1 = trim($this->request->data['Joueur']['CLUB']);
        //debug($info1); die();
        $joueurs = $this->Joueur->find('all', [
            'conditions' => [
                'AND' => [
                    'LOWER(Joueur.CLUB) LIKE' => '%' . strtolower($info1) . '%',
                    'Joueur.STATU' => '1'
                ]
            ]
        ]);

        //debug($joueurs); die();
        $this->Joueur->recursive = 0;
        $this->paginate = [
            'limit' => 20,
            'conditions' => [
                'and' => [
                    'Joueur.STATU' => '1',
                    'LOWER(Joueur.CLUB) LIKE' => '%' . strtolower($info1) . '%'
                ]
            ]
        ];

        $joueurs = $this->paginate('Joueur');
        $this->set('joueurs', $joueurs);
    }
}

这是我的视图文件

<?php
 $paginator = $this->Paginator;

 foreach ($joueurs as $joueur):
    echo'<tbody>';
echo'<tr>';

        echo '<td class="hidden-480">
        <center>';
            echo $joueur['Joueur']['LICENCES'];
        echo'</center>
        </td> ';
        echo '<td class="hidden-480">
        <center>';
            echo $joueur['Joueur']['NOM'];
        echo'</center>
        </td> ';
        
        echo '<td class="hidden-480">
        <center>';
            echo $joueur['Joueur']['PRENOM'];
        echo'</center>
        </td> ';
        echo '<td class="hidden-480">
        <center>';
            echo $joueur['Joueur']['CLUB'];
        echo'</center>
        </td> ';
        echo'<td>
        <center>';
        echo $joueur['Joueur']['SEXE'];
        echo'</center>
        </td>';
        echo'<td>
        <center>';
        echo $joueur['Joueur']['NATIONALITE'];
        echo'</center>
        </td>';
        echo'<td>
        <center>';
        echo $joueur['Joueur']['PROVEN'];
        echo'</center>
        </td>';
         echo'<td>
        <center>
        <i class="ace-icon fa fa-eye-o">&nbsp;</i>';
        echo $this->Html->link('Modifier/Voir',
            array('controller' => 'users', 'action' => 'edit_play', $joueur['Joueur']['id']),array('target' => '_blank'));
        echo'</center>
        </td>'; 
        echo '<td class="hidden-480">
        <center>';
         echo $this->Form->postLink(__('Supprimer'), array('action' => 'delet_play', $joueur['Joueur']['id']), null, __('Etes vous sûr de vouloir supprimé cet élément ?', $joueur['Joueur']['PRENOM']));  
        echo'</center>
        </td> 
    </tr>
    </tbody>';
    endforeach;
    unset($joueur);

        echo'</table>


    </div>
        </div>
    </div>
</div>';
echo'
<div style="height:50px!important">

</div>';
 
// pagination section
    echo "<div class='paging' style='text-align:center'>";
 
        // the 'first' page button
        echo $paginator->first("Debut");
         
        // 'prev' page button, 
        // we can check using the paginator hasPrev() method if there's a previous page
        // save with the 'next' page button
        if($paginator->hasPrev()){
            echo $paginator->prev("Precedent");
        }
         
        // the 'number' page buttons
        echo $paginator->numbers(array('modulus' => 3));
         
        // for the 'next' button
        if($paginator->hasNext()){
            echo $paginator->next("Suivant");
        }
         
        // the 'last' page button
        echo $paginator->last("Fin");
     
    echo "</div>";("Fin");

  
     
  echo" </div>
    </div>";
 ?>
</div>

现在这是我点击下一页时出现的错误

Notice (8): Undefined variable: joueurs [APP/View/Elements/resume_search_club.ctp, line 174]

Warning (2): Invalid argument supplied for foreach() [APP/View/Elements/resume_search_club.ctp, line 174]

几天来我一直在寻找解决方案,所以我真的需要你的帮助

提前致谢

仔细查看您的代码在做什么,当 POST 数据存在时,它将以分页形式从数据库中获取数据,并将其设置为视图变量以在您的模板中使用。因此,如果不存在 POST 数据,它不会执行任何操作,并且当您遵循(分页)link 时当然会出现这种情况,因此您会收到这些错误,因为未查询数据且未设置视图变量。

长话短说,使用 GET 数据(即查询字符串)来传递搜索词,或者首先使用 GET 数据,即将表单更改为使用 GET 而不是 POST,或者使用 PRG (Post-Redirect-Get) pattern 将您的 POST 请求转换为 GET 请求。此外,您还应该有某种故障安全机制,以便在缺少搜索词或未设置视图变量时不会出错。

带有 PRG 的简单示例:

public function search_club()
{
    // Request with POST form data
    $term = $this->request->data('Joueur.CLUB');
    if ($term) {
        // Redirect as GET query string data
        return $this->redirect([
            '?' => [
                'term' => $term
            ]
        ]);
    }

    $conditions = [
        'Joueur.STATU' => '1',
    ];

    $term = $this->request->query('term');
    if ($term) {
        $conditions += [
            'LOWER(Joueur.CLUB) LIKE' => '%' . strtolower($term) . '%'
        ];
    }

    $this->paginate = [
        'limit' => 20,
        'conditions' => $conditions,
    ];

    $this->Joueur->recursive = 0;
    $joueurs = $this->paginate('Joueur');
    $this->set('joueurs', $joueurs);
}

还要确保搜索词被集成到分页助手生成的 URL 中,如果默认情况下没有包含,您可以 modify the paginator options 并将其强制放入 URL,像这样:

$this->Paginator->options([
    'url' => [
        '?' => [
            'term' => $this->request->query('term'),
        ],
    ],
]);