将CakePHP中Paginator的'limit'属性的值放入配置文件的正确方法是什么

时间:2013-03-28 15:45:12

标签: cakephp

使用CakePHP 1.3我创建了一个具有FooController的小应用程序。在这个FooController中,我使用Paginator将Foo的内容传递给它的视图。

在FooController类的头部,我定制了来自Foo的数据准备,如下所示:

var $paginate = array(
  'limit' => 100,
  'order' => array('Order.created' => 'desc'));

现在我想将'limit'的值放入配置文件中。

所以我在config目录中创建了一个文件$config['list_length'] = '500';,我在bootstrap.php中加载。这很好,我可以回应list_length的值,例如在类的beforeFilter()中。

但是我没有让Paginator使用那个值。

首先我尝试了:

var $paginate = array(
  'limit' => Configure::read('list_length'),
  'order' => array('Order.created' => 'desc'));

但是由于以下PHP错误而失败:

Parse error: syntax error, unexpected '(', expecting ')' in xyz/app/controllers/foo_controller.php on line 9

然后我尝试了:

public function beforeFilter() {
  parent::beforeFilter();

  $paginate['limit'] = Configure::read('list_length');
}

但它仍会使用值'100'而不是'500'。

我想这是一个相当微不足道的问题,实际上来自于我对基本PHP概念不太熟练的事实。我没有太多机会在​​我目前的工作中做一点编程,所以我真的没有实践。

我非常感谢有关如何做到这一点的任何提示,更多关于我在这里缺少什么概念的提示,所以我可以阅读一些关于它的内容。

1 个答案:

答案 0 :(得分:2)

几乎做对了;

PHP在第一个示例中给出错误的原因是无法使用“动态”值设置类属性;来自文档:

此声明可能包含初始化,但此初始化必须是常量值 - 也就是说,必须能够在编译时进行评估,并且不能依赖于运行时信息的顺序待评估。

http://www.php.net/manual/en/language.oop5.properties.php

如果您需要将属性设置为“动态”值(例如函数的结果),则需要在类'方法'中指定if

您尝试在第二个示例中执行此操作,但是,应使用$this->nameOfTheProperty访问类/对象的属性以指示它不是“变量”,而是'property'对象;

public function beforeFilter() {
    parent::beforeFilter();

    $this->paginate['limit'] = Configure::read('list_length');
}

希望这有帮助