gpt4 book ai didi

zend-framework2 - 布局内的数据库查询或 zend2 中的 View

转载 作者:行者123 更新时间:2023-12-04 06:53:04 25 4
gpt4 key购买 nike

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

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

这是 indexAction。

return new ViewModel(array(
'users' => $this->getRegisterTable()->fetchAll(),
));

在 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_CONNECT 手动初始化数据库连接

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

最佳答案

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

如果我正确理解您想做什么,那么您想要显示用户已注册的语言。我会在获取用户时获取此信息,以便您的 User 模型可以使用这些语言。如果您使用 Mapper 类从中获取用户,那么这就是您获取语言的地方。那么在您看来,您应该这样做:

<?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; ?>

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

<?php echo $this->escape($language['name']); ?>

希望对你有所帮助。一旦您开始使用从单独层获取数据的架构并开始运行,您就会开始理解为什么这是最佳实践。

关于zend-framework2 - 布局内的数据库查询或 zend2 中的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16106039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com