ZF2返回下拉值,而不是视图中的id

时间:2014-11-17 12:00:25

标签: php zend-framework zend-framework2 zend-view

ZF2新手。很确定这是一个非常基本的问题,因为我可以轻松地以程序化的方式完成它,但找到难以解决的文档。很高兴收到任何文档链接。

我在db中将表单下拉列值存储为整数。当我将结果返回到我的视图时,它使用以下命令返回整数:

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

如何映射此响应,以便显示用户在表单中选择的下拉列表的实际值?

1 个答案:

答案 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内容(我会留给你)。