1

CakePHP 1.3 を使用して、FooController を持つ小さなアプリケーションを作成しました。この FooController では、Paginator を使用して Foo のコンテンツをそのビューに配信しています。

FooController クラスの先頭で、Foo からのデータの準備を次のようにカスタマイズしました。

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

ここで、「制限」の値を構成ファイルに入れたいと思います。

$config['list_length'] = '500';そこで、bootstrap.php にロードする config ディレクトリにファイルを作成しました。list_lengthそれは問題なく動作します。たとえばbeforeFilter()、クラスのの値をエコーできます。

しかし、ページネーターにその値を使用させることに失敗しました。

最初に試しました:

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

ただし、「500」ではなく「100」という値が引き続き使用されます。

これは、私が基本的な PHP の概念にあまり精通していないという事実に起因する、かなり些細な問題だと思います。現在の仕事では少しずつプログラミングをする機会があまりないので、本当に練習不足です。

これを行う方法と、ここで欠けている概念についてのヒントをいただければ幸いです。それについて少し読むことができます。

4

1 に答える 1

2

ほぼ正解です。

PHP が最初の例でエラーを表示する理由は、「動的」値を使用してクラス プロパティを設定できないためです。ドキュメントから:

この宣言には初期化が含まれる場合がありますが、この初期化は定数値である必要があります。つまり、コンパイル時に評価できる必要があり、評価されるために実行時の情報に依存してはなりません。

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

プロパティを「動的」な値 (関数の結果など) に設定する必要がある場合は、クラス「メソッド」内から if を割り当てる必要があります。

2番目の例でこれを試みましたが、クラス/オブジェクトのプロパティには、$this->nameOfThePropertyそれが「変数」ではなくオブジェクトの「プロパティ」であることを示すためにアクセスする必要があります。

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

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

お役に立てれば

于 2013-03-29T22:51:09.950 に答える