A free and open-source book on ZF3 for beginners


12.13. Реализация страницы администратора

Страница администратора нашего примера 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 ниже:

Рисунок 12.10. Страница блога Admin Рисунок 12.10. Страница блога Admin


Top