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

В приложении 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) Запустите новый запрос из помощника вида, чтобы вернуть то, что мне нужно, или
Б) Используйте функцию под названием getUser() из модуля «Пользователь» / 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.

0

Решение

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

Наличие в вашей модели помощника вида вызова метода 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); ?>
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]