ZF2新手。很确定这是一个非常基本的问题,因为我可以轻松地以程序化的方式完成它,但找到难以解决的文档。很高兴收到任何文档链接。
我在db中将表单下拉列值存储为整数。当我将结果返回到我的视图时,它使用以下命令返回整数:
echo $this->escapeHtml($user->system);
如何映射此响应,以便显示用户在表单中选择的下拉列表的实际值?
答案 0 :(得分:2)
一种选择是通过视图助手,尽管还有其他方法。
为任何能够识别的实体创建一个界面。系统,SystemAwareInterface
。
确保您的用户类(或任何其他类)实现此接口并返回系统ID。
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
助手并在getName()
方法中转义HTML内容(我会留给你)。