Страница администратора нашего примера Blog содержит список всех постов блога (как опубликованных, так и черновиков) и позволяет просматривать, изменять и удалять посты.
Для реализации этой страницы добавьте метод действия adminAction()
в класс PostController
как показано ниже:
<?php
//..
class PostController extends AbstractActionController
{
/**
* Это действие отображает страницу Manage Posts. Она содержит
* список постов с возможностью изменить/удалить любой из них.
*/
public function adminAction()
{
// Получаем посты.
$posts = $this->entityManager->getRepository(Post::class)
->findBy([], ['dateCreated'=>'DESC']);
// Визуализируем шаблон представления.
return new ViewModel([
'posts' => $posts,
'postManager' => $this->postManager
]);
}
}
Кроме того, нам нужно показывать статус поста в текстовой форме ('Draft', черновик, или 'Published', опубликован).
Преобразования статуса типа integer в строку может быть реализовано в методе getPostStatusAsString()
сервиса PostManager
. Добавьте метод getPostStatusAsString()
в класс PostManager
следующим образом:
/**
* Возвращает статус в виде строки.
*/
public function getPostStatusAsString($post)
{
switch ($post->getStatus()) {
case Post::STATUS_DRAFT: return 'Draft';
case Post::STATUS_PUBLISHED: return 'Published';
}
return 'Unknown';
}
Далее, добавьте файл соответствующего шаблона представления admin.phtml в каталог application/post под каталогом модуля view:
<h1>Manage Posts</h1>
<p>
<a class="btn btn-default" href="
<?= $this->url('posts', ['action'=>'add']); ?>">
New Post
</a>
</p>
<table class="table table-striped">
<tr>
<th>ID</th>
<th>Post Title</th>
<th>Date Created</th>
<th>Status</th>
<th>Actions</th>
</tr>
<?php foreach ($posts as $post): ?>
<tr>
<td><?= $this->escapeHtml($post->getId()); ?></td>
<td>
<a href="<?= $this->url('posts', ['action'=>'view', 'id'=>$post->getId()]); ?>">
<?= $this->escapeHtml($post->getTitle()); ?>
</a>
</td>
<td><?= $this->escapeHtml($post->getDateCreated()); ?></td>
<td><?= $this->escapeHtml($postManager->getPostStatusAsString($post)); ?></td>
<td>
<a class="btn btn-info" href="<?= $this->url('posts',
['action'=>'edit', 'id'=>$post->getId()]); ?>">
<span class="glyphicon glyphicon-pencil" ></span> Edit
</a>
<a class="btn btn-danger" href="<?= $this->url('posts',
['action'=>'delete', 'id'=>$post->getId()]); ?>">
<span class="glyphicon glyphicon-remove"></span> Delete
</a>
</td>
</tr>
<?php endforeach; ?>
</table>
Теперь, если вы откроете в своем браузере URL http://localhost/posts/admin, вы должны будете увидеть страницу, как на рисунке 12.10 ниже: