Вы действительно должны научиться создавать частичные . То, что вы делаете сейчас, - это смешение проблем.
То, что вы делаете в вашем контроллере, приведет к огромному беспорядку, если / когда вам придется провести рефакторинг.
С частями вы бы сделали что-то вроде этого.
Файл: notizen-partial.phtml
<?php
/** @var array $notizen */
?>
<table>
<tr>
<th>datum</th>
<th>text</th>
</tr>
<tr>
<td><?= $notizen['datum'] ?></td>
<td><?= $notizen['text'] ?></td>
</tr>
</table>
Итак, в приведенном выше примере ожидается переменная $notizen
типа array (намекает в PHP вверху). Вы можете добавить некоторую проверку того, что массив действительно присутствует, содержит значения и т. Д., Но это зависит от вас.
Теперь зарегистрируйте этот частичный элемент в конфигурации модуля со следующей конфигурацией:
'view_manager' => [
'template_map' => [
'partial/notizen-partial' => __DIR__ . '/../view/partials/notizen-partial.phtml',
],
],
Убедитесь, что вы исправили путь для своей ситуации !!!
Повторите вышеуказанное для каждого маленького «контейнера» обработки ваших данных (wvs
, aps
и т. Д.).
Затем выполните действие, которое вернет данные, необходимые для просмотра:
// ... create/get data
return [
'wvs' => $this->wvTable->fetchAll(),
'notizen' => $this->notizenTable->fetchAll(),
'aps' => $this->ansprechpartnerTable->getGeburtstage(),
];
Это относится к "action-view.phtml" или как угодно. Этот файл обрабатывает «данные о месте, где он должен быть».
Макет представления, основанный на вашем скриншоте, будет выглядеть примерно так (я предполагаю, что вы используете Bootstrap 4. *):
<div class="row">
<div class="col-12">
<!-- That top row - full width -->
<!-- ## notizen here ## -->
</div>
</div>
<div class="row">
<div class="col-8">
<!-- second row - two thirds of width -->
<!-- Wiedervorlagen here -->
</div>
<div class="col-4">
<!-- second row, second column - one thirds of width -->
<!-- Geburtstage here -->
</div>
</div>
Теперь вам нужно использовать дополнительные партиалы для отображения данных в нужных местах. Например, ваши 'notizen'
данные теперь являются $notizen
переменными в этом представлении. Однако мы не используем его в этом представлении, поэтому давайте передадим его в созданный ранее фрагмент, например, так:
<?= $this->partial('partial/notizen-partial, ['notizen' => $notizen]) ?>
Здесь много чего происходит:
- Вызов
partial
ViewHelper (посмотрите в папке этого файла, чтобы увидеть другие ViewHelpers уже доступны!)
- Передав ему имя партиала, которое мы установили в конфигурации ранее
- Передача пар ключ / значение. Ключи будут именами переменных, значения будут их значениями (вы можете добавить столько, сколько вам нужно / нужно)
Поместите этот вызов в вашем действии, например:
<div class="row">
<div class="col-12">
<!-- That top row - full width -->
<?= $this->partial('partial/notizen-partial, ['notizen' => $notizen]) ?>
</div>
</div>
И все готово.
Теперь у вас есть:
- Отдельные партиалы для отображения наборов данных
- Использование ViewHelpers, поэтому вы можете перерабатывать одно и то же представление в разных местах вашего приложения
- Отдельные проблемы вашего кода (отображение в файлах шаблонов phtml, сбор / обработка данных в контроллере, логика в репозиториях / моделях / объектах)
Я старательно игнорировал вашу вставленную форму. Принцип для этого тот же, вы можете передать $form
в частичную часть, и эта частичная часть будет содержать отображение формы. Создание чего-то многоразового использования.
Если вы хотите узнать больше о настройке Form ViewHelpers (например, FormRow, FormElement, FormNumber и т. Д.), См. ответов, которые я дал другим , таких как this .