Zend framework2 zend2中布局或视图内部的数据库查询

Zend framework2 zend2中布局或视图内部的数据库查询,zend-framework2,Zend Framework2,如何在视图中访问zend数据库连接 在我的例子中,my USERS index.phtml显示所有用户的列表,并使用多种语言注册用户,这些语言以JSON格式存储在数据库中 这是索引 return new ViewModel(array( 'users' => $this->getRegisterTable()->fetchAll(), )); 和inside index.phtml <?php foreach ($user

如何在视图中访问zend数据库连接

在我的例子中,my USERS index.phtml显示所有用户的列表,并使用多种语言注册用户,这些语言以JSON格式存储在数据库中

这是索引

return new ViewModel(array(
        'users'             => $this->getRegisterTable()->fetchAll(),
    ));
和inside index.phtml

<?php foreach ($users as $users):?>
<?php 
$getQuery = mysql_query("SELECT * FROM lang where id= $users->lang ");
$getResult = mysql_fetch_array($getQuery);
$lang = "<a href='" . $this->url(lang , array('action'=>'detail', 'id'=> $users->lang )) . "'>" .$getResult['name']."</a>";
 ?>
<?php endforeach;?>

因此,要执行此查询,我必须使用MYSQL\u CONNECT手动初始化数据库连接


但我希望它只访问zend并初始化数据库连接。

正如其他人正确指出的那样,这是一件非常糟糕的事情。这些数据应该从控制器发送到视图,并且视图不应该使用数据库,甚至不应该知道正在使用数据库。通过打破MVC(模型-视图-控制器)设计模式,您的代码将更难维护和理解

如果我正确理解了您希望执行的操作,那么您希望显示用户已注册的语言。在获取用户时,我会获取这些信息,这样您的
用户
模型上就可以使用这些语言。如果您使用映射器类从中获取用户,那么这就是获取语言的地方。那么在你看来,你应该这样做:

<?php foreach ($users as $user) : ?>
    <?php foreach ($user->getLanguages() as $language) : ?>
        <?php $lang = "<a href='" . $this->url('lang' , array('action'=>'detail', 'id'=> $language['id'] )) . "'>" . $language['name'] . "</a>"; ?>
    <?php endforeach; ?>
<?php endforeach; ?>

我希望有帮助。一旦您开始使用从单独的层获取数据的体系结构并运行,您将开始理解为什么这是最佳实践。

使用视图帮助器。您可以在其中与数据库交互。请删除任何示例链接。、,这确实是错误的做法。你应该在模型层中进行查询,并通过你的控制器从那里获取完整的结果。我必须强调@Crisp的观点,控制器的任务是将所有必需的数据传递给视图。然后,视图只需在数据中迭代,仅用于渲染目的。ViewHelper永远不应该包含这样的业务登录。
<?php echo $this->escape($language['name']); ?>