используя cakephp, как мне обрабатывать операции с моделями, которые не дают результатов, чтобы мое представление не нарушалось? - PullRequest
1 голос
/ 04 марта 2010

В моем контроллере есть модельные операции, которые могут возвращать пустые результаты. Я настроил представление для отображения результатов с помощью цикла foreach. Но если операция модели пуста и не дает результатов, то цикл foreach на мой взгляд прерывается.

Это операция:

$ match3 = $ this-> Draw-> Match-> find ('all', array ('условие' => array ('Match.draw_id' => $ id, 'Match.round_id' => 1, 'Match.match_position' => 3)));

Что мне нужно добавить к операции модели, чтобы вернуть ноль? Или null лучший способ справиться с этим?

Если данных нет, я не хочу ничего отображать.

Я попробовал это, но получил неопределенную ошибку индекса:

if (! $ Match3) вернуть ноль; еще вернуть $ match3;

Есть ли лучшая практика, когда дело касается обработки пустых моделей?

Очень ценится. -Поль

Ответы [ 3 ]

4 голосов
/ 04 марта 2010

IMO, «лучшая практика» не зависит от CakePHP.Если ваш результат установлен пустым, важно информировать ваших пользователей об этом факте.Это простой тест (в данном случае для пустого массива, как указано Трэвисом) и простой результат.Обычно я так делаю в своих взглядах:

<?php if( empty( $match3 ) ): ?>
  <h2>Display an appropriate empty set message.</h2>
<?php else: ?>
  # do whatever you need to do to display the result set
<?php endif; ?>
3 голосов
/ 04 марта 2010

Если ваша операция поиска не имеет результатов, она просто вернет пустой массив.

По вашему мнению, просто добавьте логику, чтобы убедиться, что $ match3 не является пустым массивом, прежде чем выводить этот раздел. Например, в представлении

<?php
 // some code here to output part of the page
 if( !empty( $match3 ) )
  foreach( $match3 as $matches )
   ; // do something with $matches
 // rest of your view code
?>
0 голосов
/ 05 марта 2010

Очень сильно зависит от вашего приложения, следующие ответы могут быть подходящими:

$result = $this->Model->find(…);

if (!$result) {
    // redirect to another page and display message
    $this->Session->setFlash('No results found');
    $this->redirect(array('action' => 'index'));
}

или

if (!$result) {
    // throw a 404 (or any other) error
    $this->cakeError('error404');
}

Опять же, это очень сильно зависит от приложения и рассматриваемого действия, особенно 404 должен не быть стандартным ответом. Во многих случаях, вероятно, лучше всего справиться с этим в представлении, рекомендованном Rob .

...