3

まず第一に、私は CakePHP の完全な初心者です。CakePHP で students というテーブルを作成しました。並べ替え可能なヘッダーが必要なだけなので、ページネーターのヘルプ クラスを使用しました。残念ながら、次の警告が表示されますが、理由がわかりません。さらに、並べ替えが機能しません。

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

それでも同じエラーが発生します。ここで本当に単純なものが欠けていますか??? 私は何時間もグーグルで検索していたので運が悪かった....

4

2 に答える 2

3

実際には Paginator コンポーネントを使用していないため、ヘルパーが使用する必要なリクエスト データを設定していません。インデックス関数を次のように変更します

public function index(){
    $this->set('students', $this->paginate());
    // or $this->set('students', $this->Paginator->paginate());
}
于 2012-11-15T23:25:14.540 に答える
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());       
        ...
    }
}
于 2015-03-24T11:09:29.850 に答える