A free and open-source book on ZF3 for beginners

Translation into this language is not yet finished. You can help this project by translating the chapters and contributing your changes.

12.13. Implementar la Página de Administración

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:

Figure 12.10. Página Admin del Blog Figure 12.10. Página Admin del Blog


Top