Я пытаюсь вернуть количество результатов, найденных на моей странице над таблицей HTML. Я впервые использую фреймворк mvc, так что для меня это совершенно ново для меня.
Мой запрос работает и успешно отображает табличные результаты, моя проблема [вероятно] связана с позиционированием моего кода возврата?
Я включил мой код для справки;
модель
public function categoryView()
{
$sth = $this->db->prepare("SELECT
b.id,
b.title,
b.category,
FROM book
WHERE status != 'Archive' AND category = :cat ORDER BY id DESC LIMIT 15");
$sth->bindValue(':cat', $_GET['category']);
$sth->execute();
$result = $sth->fetchAll(PDO::FETCH_ASSOC); // won't run when included
return count($result); // won't run when included
$all_books = array();
foreach ($sth->fetchAll() as $book) {
$all_books[$book->id] = new stdClass();
$all_books[$book->id]->id = $book->id;
$all_books[$book->id]->title = $book->title;
$all_books[$book->id]->category = $book->cat_name;
}
return $all_books;
}
Посмотреть
Found <?php echo count($result); ?> records
<table>
<?php
foreach ($this->books as $book) {
echo "<tr>";
echo '<td>'.$book->id.'</td>';
echo '<td>'.$book->title.'</td>';
echo '<td>'.$book->category.'</td>';
echo "</tr>";
}
?>
</table>
контроллер
function categoryView()
{
$categoryView_model = $this->loadModel('Books');
$this->view->books = $categoryView_model->categoryView();
$this->view->render('books/categoryView');
}
Я получаю сообщения об ошибках на странице просмотра
Warning: `Invalid argument supplied for foreach() ... on line 51`
а также
Found
Notice: Undefined variable: result in ... on line 47
0 records
Строка 47 содержит Found <?php echo count($result); ?> records
Строка 51 содержит foreach ($this->books as $book) { ... }
Любой совет или помощь приветствуется.
Удалить эти две строки
$result = $sth->fetchAll(PDO::FETCH_ASSOC); // won't run when included
return count($result); // won't run when included
На ваш взгляд, изменения
Found <?php echo count($result); ?> records
в
Found <?php echo count($this->books); ?> records
Причина, по которой вы должны это сделать, заключается в том, что вы сохраняете результаты, возвращенные из categoryView()
в books
свойство представления при запуске следующей строки
$this->view->books = $categoryView_model->categoryView();
Обратите внимание, что количество всегда будет максимум 15. Если вы хотите отобразить общее количество найденных результатов, вы должны выдать отдельный select count(*)
без limit
пункт.
Нам бы очень помогло, если бы вы указали рамки. Честно говоря, я работал в Zend только как php-фреймворк, но там вы должны назначить свойство вашему представлению:
$this->view->property = $all_books; //or any other property
и получить его в представлении
<?php echo $this->property; ?>
Мне трудно поверить, что ваш MVC вызывает функцию (действие), которая в Zend должна быть названа особым образом из представления и поэтому использует возврат. Я скажу вам одну вещь: ваш способ отправки переменной в представление неверен, возвращение не должно быть правильным способом отправки. Без вашей структуры это единственный способ, которым я могу вам помочь. Кроме того, я бы сказал, что вы должны фактически отобразить isset для обеих переменных, и вы поймете, что моя теория верна: вы неправильно отправляете переменные из контроллера, действия или функции