La página de administración, o simplemente página Admin, de nuestra aplicación web de ejemplo Blog contiene un lista de todas las publicaciones del blog (tanto las publicadas como los borradores) y permite ver, editar y borrar las publicaciones.
Para implementar esta página agregamos un método de tipo acción llamado adminAction()
dentro de la clase PostController
de la siguiente manera:
<?php
//..
class PostController extends AbstractActionController
{
/**
* This "admin" action displays the Manage Posts page. This page contains
* the list of posts with an ability to edit/delete any post.
*/
public function adminAction()
{
// Get posts
$posts = $this->entityManager->getRepository(Post::class)
->findBy([], ['dateCreated'=>'DESC']);
// Render the view template
return new ViewModel([
'posts' => $posts,
'postManager' => $this->postManager
]);
}
}
Además, necesitaremos mostrar el estado de las publicaciones en forma de texto
('Draft' o 'Published'). La conversión del estado de la publicación desde un entero
a una cadena de caracteres se puede implementar con el método getPostStatusAsString()
del servicio PostManager
. Agregamos el método getPostStatusAsString()
a la clase
PostManager
de la siguiente manera:
/**
* Returns status as a string.
*/
public function getPostStatusAsString($post)
{
switch ($post->getStatus()) {
case Post::STATUS_DRAFT: return 'Draft';
case Post::STATUS_PUBLISHED: return 'Published';
}
return 'Unknown';
}
Finalmente agregamos el archivo de plantilla de vista correspondiente admin.phtml a la carpeta application/post dentro de la carpeta view del directorio del módulo.
<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>
Ahora si abrimos la URL http://localhost/posts/admin/ en el navegador web debemos ser capaces de ver una página como la de la figura 12.10: