Новое в ZF2. Я уверен, что это очень простой вопрос, так как я могу легко сделать это в процедурном стиле, но трудно найти документацию. Любые ссылки на документацию с удовольствием получили.
Я сохраняю значение выпадающего списка в виде целого числа в БД. Когда я возвращаю результаты в мое представление, он возвращает целое число, используя:
echo $this->escapeHtml($user->system);
Как мне сопоставить этот ответ, чтобы показать фактическое значение раскрывающегося списка, выбранного пользователем в форме?
Одним из вариантов будет использование помощника вида, хотя есть и другие способы.
Создайте интерфейс для любого объекта, который «знает» о системе, скажем, 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()
метод (я оставлю это вам).
Других решений пока нет …