Как структурировать представление помощника с помощью SQL в Zend Framework 2

0

Приложение Zend Framework 2 имеет представление, в котором я показываю журнал событий в простом формате таблицы. Я использую несколько основных помощников справки для управления представлением данных в таблице, но в этих существующих помощниках просмотра вся логика содержится в самом помощнике представления, например:

namespace Application\View\Helper;
use Zend\View\Helper\AbstractHelper;

class GetSystemName extends AbstractHelper
{
    public function __invoke($val)
    {
        if ($val == 0){
            return 'Something';
        }
        if ($val == 1){
            return 'Something else';
       }
    }
}

Мое требование - создать функцию GetUserName для принятия user_id и выполнить проверку базы данных, чтобы отобразить имя пользователя, поскольку идентификатор не имеет значения для человека, использующего систему.

Как я его вижу, я могу:

A) Начните новый запрос из Помощника просмотра, чтобы вернуть то, что мне нужно, или B) Используйте функцию, называемую getUser() из класса User/Module/UserTable.

Код для B:

namespace User\Model;

use Zend\Db\TableGateway\TableGateway;

 class UserTable
 {
 protected $tableGateway;

 public function __construct(TableGateway $tableGateway)
 {
     $this->tableGateway = $tableGateway;
 }

 //..other functions

 public function getUser($id)
 {
     $id  = (int) $id;
     $rowset = $this->tableGateway->select(array('id' => $id));
     $row = $rowset->current();
     if (!$row) {
         throw new \Exception("Could not find row $id");
     }
     return $row;
 }

Каков наилучший вариант? И как мне его реализовать?

Извините, если это основные вопросы, я довольно новичок в MVC и Zend.

Теги:
model-view-controller
zend-framework
zend-framework2
zend-db

1 ответ

1

В шаблоне модели-представления-контроллера представление не должно знать о слое модели. Информация с моделей вводится в представление через контроллер.

При вызове помощника вашего представления метод getUser() в вашей модели разбивает этот шаблон.

Ну так что ты делаешь?

Попросите вашего контроллера получить информацию о пользователе в представлении:

// controller
$userId = $this->params()->fromQuery("userID"); 
// or from session ID if this is a private profile page
// You might want some validation, too...

$userTable = $this->getServiceLocator()->get("UserTable"); 
// or whatever you've configured in the service config for this

$user = $userTable->getUser($userId); 
// if this is a public profile page, you might want to 
// exclude some fields like "password" so they don't 
// accidentally get into the view

$view = new ViewModel();
$view->setVariable("user", $user);

return $view;

Затем в view.phtml вы просто выполните:

<?php $this->GetSystemName($user->whateverField); ?>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню