ZF2 возвращает раскрывающееся значение, а не идентификатор в поле зрения

Новое в ZF2. Я уверен, что это очень простой вопрос, так как я могу легко сделать это в процедурном стиле, но трудно найти документацию. Любые ссылки на документацию с удовольствием получили.

Я сохраняю значение выпадающего списка в виде целого числа в БД. Когда я возвращаю результаты в мое представление, он возвращает целое число, используя:

echo $this->escapeHtml($user->system);

Как мне сопоставить этот ответ, чтобы показать фактическое значение раскрывающегося списка, выбранного пользователем в форме?

0

Решение

Одним из вариантов будет использование помощника вида, хотя есть и другие способы.

Создайте интерфейс для любого объекта, который «знает» о системе, скажем, SystemAwareInterface,
Убедитесь, что ваш пользовательский класс (или любой другой класс) реализует этот интерфейс и возвращает системный идентификатор.

interface SystemAwareInterface {
public function getSystemId();
}

Создайте помощник вида, я предполагаю, что пространство имен верхнего уровня System и что у вас есть какой-то сервис, который может загрузить запись из базы данных по ее идентичности (давайте назовем ее SystemService с методом loadById()).

namespace System\View\Helper;

use System\Entity\SystemAwareInterface;
use System\Service\SystemService;
use Zend\View\Helper\AbstractHelper;

class System extends AbstractHelper
{
// Service used to 'load' a system
protected $systemService;

public function __construct(SystemService $systemService)
{
$this->systemService = $systemService;
}

public function __invoke(SystemAwareInterface $entity = null)
{
if (0 === func_num_args()) {
return $this;
}
return $this->render($entity);
}

public function render(SystemAwareInterface $entity)
{
return $this->systemService->loadById($entity->getSystemId());
}

public function getName(SystemAwareInterface $entity)
{
$system = $this->render($entity);

return $system->getName();
}
}

Затем зарегистрируйте сервис в ViewHelperPluginManager добавив фабрику в getViewHelperConfig,

public function getViewHelperConfig()
{
return array(
'factories' => array(
'System' => function($vpm) {
$sm = $vpm->getServiceLocator();
$service = $sm->get('System\Service\SystemService');

return new View\Helper\Sysytem($service);
}
),
);
}

Теперь в скрипте вида вы можете отобразить имя системы с помощью помощника.

// echo out the name of the system
echo $this->system()->getName($user);

Вы также можете использовать других помощников вида в вашем новом помощнике; чтобы вы могли получить escapeHtml помощник и экранировать содержимое HTML в getName() метод (я оставлю это вам).

2

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

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

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