Question

Frist of all let me just day that i am a complete beginner in cakePHP. I have created a table called students in cakePHP and i just want to have sortable headers, so i used the paginator help class. Unfortunately i am getting the following warnings and i just cannot understand why, plus the sorting doesn't work.

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]

Here is my controller

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'));
            }
        }
    }
}

?>

And here is my view actually my 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>

I've also used the following

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

and i still get the same error. Am i missing something really simple here??? because i've been googling for hours nad no luck....

Was it helpful?

Solution

You're not actually using the Paginator component and thus it's not setting the needed request data which the helper uses. Change your index function to look like

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

OTHER TIPS

There are 2 ways to do this.

Method 1: without using 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());

        ...
    }
}

Method 2: Using Paginator

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());       
        ...
    }
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top