1

私は基本的に、結果をビューに送信する前に、関数を介して値を渡すことができるようにしたいと考えています...

public function listing() {
    $this->set('posts',  $this->paginate('Post'));
}

だから私はそこに何か言いたいのです、例えば:

    foreach($posts as $post){
        $post["Post"]["timestamp"] = $this->timeago($post["Post"]["timestamp"]);
    }

そして、このフィールドで結果をページ分割し、ビューに送信する全体の配列として「posts」を設定します - 「timeago」関数でタイムスタンプを更新しました。これを行う最善の方法は何ですか?

4

3 に答える 3

1

これは基本的なphpです。配列を変更するには、次のように $key を使用する必要があります。

foreach ($posts as $key => $post) {
    $posts[$key]["Post"]["timestamp"] = $this->timeago($post["Post"]["timestamp"]);
}

しかし、本当に必要なのは、実際に出力する前にタイムスタンプを変更することです。

// in your view ctp
foreach ($posts as $post) {
    ...
    $formattedTimestamp = $this->Time->timeAgoInWords($post["Post"]["timestamp"]);
    echo '<span>' . $formattedTimestamp . '</span>';
    ...
}

私の意見では、出力の書式設定はモデル レイヤーで行うべきではありません。特に、コールバックを使用しないでください。きれいにフォーマットされたフィールドを使用しないと、モデルがレコードを無駄にループしてしまいます。そのため、「オンデマンド」で行うことを好みます。

于 2013-01-19T10:37:59.967 に答える
1

これらのメソッドをモデルの動作 afterFind() に実装することを検討してください。
詳細については、http: //book.cakephp.org/2.0/en/models/callback-methods.htmlを参照してください。

于 2013-01-19T10:57:38.180 に答える
1

別の可能性: 参照を使用します。

// Note the "&"
foreach($posts as &$post){
    $post["Post"]["timestamp"] = $this->timeago($post["Post"]["timestamp"]);
}

これにより、各にアクセスするときに実際に$posts配列が変更されます$post

于 2013-01-19T20:14:22.967 に答える