2012-11-15 35 views
3

首先让我告诉我,我是cakePHP的完整初学者。 我已经在cakePHP中创建了一个名为students的表,我只想拥有可排序的标题,所以我使用了paginator帮助类。不幸的是,我收到以下警告,我只是不明白为什么,加上排序不起作用。无法对cakePHP中的数据进行排序和分页

Warning (2) 
: array_filter() expects parameter 1 to be array, null given  
[CORE\Cake\View\Helper\PaginatorHelper.php, line 395] 

Warning (2) 
: array_merge() [ 
function.array-merge 
]: Argument #1 is not an array [CORE\Cake\View\Helper\PaginatorHelper.php, line 395] 

这里是我的控制器

enter code here 
<?php 
class StudentsController extends AppController{ 
    public $helpers = array('Html', 'Form', 'Session', 'Paginator'); 
    public $components = array('Session', 'Paginator'); 



    public function index(){ 
     $this->set('students', $this->Student->find('all')); 
    } 

    public function view($id = NULL){ 
     $this->Student->id = $id; 
     $this->set('student', $this->Student->read()); 
    } 

    public function add(){ 
     if($this->request->is('post')){ 
      $this->Student->create(); 
      if($this->Student->save($this->request->data)){ 
       $this->Session->setFlash('The student has been added.'); 
       $this->redirect(array('action' => 'index')); 
      }else{ 
       $this->Session->setFlash('Unable to add the student'); 
      } 
     } 
    } 

    public function edit($id = NULL){ 
     $this->Student->id = $id; 
     if($this->request->is('get')){ 
      $this->request->data = $this->Student->read(); 
     }else{ 
      if($this->Student->save($this->request->data)){ 
       $this->Session->setFlash('The student has been edited'); 
       $this->redirect(array('action' => 'index')); 
      }else{ 
       $this->Session->setFlash('Unable to edit the student'); 
      } 
     } 
    } 

    public function delete($id = NULL){ 
     if($this->request->is('get')){ 
      throw new MethodNotAllowedException; 
     }else{ 
      if($this->Student->delete($id)){ 
       $this->Session->setFlash('The Student has been succesfully deleted'); 
       $this->redirect(array('action' => 'index')); 
      } 
     } 
    } 
} 

?>

这是我的观点实际上我的索引

<h1>Welcome to the Students Page</h1> 

<?php echo $this->Html->link('Add Student', array('controller' => 'students', 'action' => 'add')); ?> 

    <table> 
     <tr> 
      <th><?php echo $this->Paginator->sort('id', 'Matriculation Number'); ?></th> 
      <th>Last Name</th> 
      <th>First Name</th> 
      <th>Course Of Studies</th> 
      <th>Email</th> 
      <th>Remark</th> 
     </tr> 
     <?php 
      foreach($students as $student): 
     ?> 
     <tr> 
      <td><?php echo $student['Student']['id']?></td> 
      <td><?php echo $student['Student']['last_name']?></td> 
      <td><?php echo $student['Student']['first_name']?></td> 
      <td><?php echo $student['Student']['course_of_studies']?></td> 
      <td><?php echo $student['Student']['email']?></td> 
      <td><?php echo $student['Student']['remark']?></td> 
      <td><?php echo $this->Html->link($student['Student']['id'], array('controller' => 'students', 'action' => 'view', $student['Student']['id'])); ?> 
      <td><?php echo $this->Html->link('Edit', array('controller' => 'students', 'action' => 'edit', $student['Student']['id']));?></td> 
      <td><?php echo $this->Form->postLink('Delete', array('controller' => 'students', 'action' => 'delete', $student['Student']['id']), array('confirm' => 'Are you sure ?')); ?></td> 
     </tr> 
     <?php endforeach; ?> 
      <?php unset($student); ?> 
    </table> 

我也用以下

<?php echo $this->Paginator->sort('id', 'Matriculation Number', array('model' => 'Student')); ?> 
<?php echo $this->Paginator->sort('Student.id', 'Matriculation Number'); ?> 

我仍然得到相同的错误。我在这里错过了很简单的事情吗?因为我一直在谷歌搜索几个小时没有运气....

回答

3

你实际上并没有使用Paginator组件,因此它没有设置助手使用的需要的请求数据。更改索引功能看起来像

public function index(){ 
    $this->set('students', $this->paginate()); 
    // or $this->set('students', $this->Paginator->paginate()); 
} 
0

有2种方法可以做到这一点。

方法1:在不使用Paginatior

class StudentsController extends AppController { 

    public $paginate = array(); 

    public function index() {  
     ... 
     $this->paginate['order'] = array('Student.created' => 'desc'); 
     $this->paginate['conditions'] = array('Student.active' => 1); 
     $this->paginate['limit'] = 10; 
     $this->set('students', $this->paginate()); 

     ... 
    } 
} 

方法2:使用分页程序

class StudentsController extends AppController { 

    public $helpers = array('Paginator'); 
    public $components = array('Paginator'); 
    public $paginate = array(
     'limit' => 25, 
     'order' => array(
      'Student.created' => 'desc' 
     ) 
    ); 

    public function index() {  
     ... 
     $this->Paginator->settings = $this->paginate; 
     $this->set('students', $this->Paginator->paginate());  
     ... 
    } 
} 
相关问题