首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >zend2中布局或视图中的数据库查询

问zend2中布局或视图中的数据库查询
EN

Stack Overflow用户
提问于 2013-04-19 21:40:43
回答 1查看 245关注 0票数 3

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

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

这是indexAction。

代码语言:javascript
复制
return new ViewModel(array(
        'users'             => $this->getRegisterTable()->fetchAll(),
    ));

在index.phtml内部

代码语言:javascript
复制
<?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_CONNECT手动初始化数据库连接

但我只想让它访问zend初始化数据库连接。

EN

回答 1

Stack Overflow用户

发布于 2013-04-21 22:26:26

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

如果我知道你想要做的是正确的,那么你想要显示用户已经注册的语言。我会在获取用户时获取此信息,以便这些语言在您的User模型上可用。如果你使用一个Mapper类来获取你的用户,那么这里就是你获取语言的地方。那么在你看来,你应该像这样做:

代码语言:javascript
复制
<?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; ?>

现在,您的表示(视图)层中不再具有业务逻辑或数据访问逻辑。请记住使用escape视图帮助器从数据库中转义数据,如下所示:

代码语言:javascript
复制
<?php echo $this->escape($language['name']); ?>

我希望它能帮上忙。一旦您开始使用从单独的层获取数据的体系结构,您就会开始理解为什么这是最佳实践。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16106039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档