总而言之,我只是让我在cakePHP中成为一个完全的初学者。 我在cakePHP中创建了一个名为students的表,我只想拥有可排序的头文件,所以我使用了paginator帮助类。不幸的是,我收到以下警告,我只是无法理解为什么,加上排序不起作用。
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'));
}
}
}
}
&GT;
这是我的观点实际上是我的索引
<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'); ?>
我仍然得到同样的错误。我错过了一些非常简单的东西吗???因为我一直在谷歌搜索几个小时没有运气....
答案 0 :(得分:3)
您实际上并没有使用Paginator组件,因此它没有设置帮助程序使用的所需请求数据。将索引函数更改为
public function index(){
$this->set('students', $this->paginate());
// or $this->set('students', $this->Paginator->paginate());
}
答案 1 :(得分:0)
有两种方法可以做到这一点。
方法1:不使用分页
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:使用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());
...
}
}