4

結果オブジェクトにエントリが含まれている場合、ビュー テンプレート内でどのようにチェックしますか?

似たような質問がありましたが、こちらは少し違います)

たとえば、CakePHP 3 ブログ チュートリアルを見てみましょう。すべての記事を 1 ページに一覧表示する方法を示します。

// src/Controller/ArticlesController.php
public function index() {
  $this->set('articles', $this->Articles->find('all'));
}

ビュー テンプレート:

<!-- File: src/Template/Articles/index.ctp -->
<table>
  <tr>
    <th>Id</th>
    <th>Title</th>
  </tr>
<?php foreach ($articles as $article): ?>
  <tr>
    <td><?= $article->id ?></td>
    <td>
      <?= $this->Html->link($article->title, ['action' => 'view', $article->id]) ?>
    </td>
</tr>
<?php endforeach; ?>
</table>

欠点:データベースにエントリがない場合でも、HTML テーブルはレンダリングされます。

これを防ぎ、「申し訳ありませんが結果がありません」などの簡単なメッセージを表示するにはどうすればよいですか?

CakePHP 2私が使用した

if ( !empty($articles['0']['id']) ) {
  // result table and foreach here
} else {
  echo '<p>Sorry no results...</p>';
}

しかし、$articles現在はオブジェクトであるため、これはもう機能しません...結果オブジェクトを確認するための新しい「短い方法」はありますか? または、通常、最初に別の foreach を使用しますか?

$there_are_results = false;
foreach ($articles as $article) {
  if ( !empty($article->id) ) {
    $there_are_results = true;
    break;
  }
}
if ( $there_are_results == true ) {
  // result table and second foreach here
} else {
  echo '<p>Sorry no results...</p>';
}

ヒントをありがとう。

4

3 に答える 3

1

テンプレートから $articles->count() を呼び出すことができると思います。(0 をチェック)

于 2015-05-03T15:35:52.887 に答える