为 Zend 应用程序提供数据库处理程序的“正确”方法是什么

2024-06-19

假设您严格遵守某个组织的惯例Zend应用程序 http://framework.zend.com/manual/en/zend.application.html,您应该在哪里设置数据库处理程序以供应用程序开发人员访问?

我知道如何设置ZendDb http://framework.zend.com/manual/en/zend.db.html适配器。我想知道的是,在 Zend Framework 的上下文中,开发人员应该如何实例化他们的数据库处理程序,这样他们就不必担心跨一个请求的多个实例化、每次提供凭据等。

例如,当开发人员使用 Code Igniter 并需要运行任意查询时,控制器上有一个数据库处理程序。

$this->db->query(....

这个约定在 Zend 中相当于什么?需要明确的是,我可以想到六种使用 Zend Framework 提供的工具来完成此任务的方法。我正在寻找的是 Zend Framework 在一般情况下希望您如何执行此操作。


这个想法是,您的 Bootstrap 读取配置文件,并声明配置条目来描述您想要创建的数据库适配器:

[bootstrap]
resources.db.adapter = Pdo_Mysql
resources.db.params.dbname = "mydatabase"
resources.db.params.username = "webuser"
resources.db.params.password = "XXXX"
resources.db.isDefaultTableAdapter = true

如果您按照正确的约定使用配置键,这会自动向 Bootstrap 基类发出信号以创建并初始化Zend_Application_Resource_Db对象,并将其存储在引导资源注册表 http://framework.zend.com/manual/en/zend.application.theory-of-operation.html#zend.application.theory-of-operation.bootstrap.registry.

稍后在您的控制器中,您可以访问资源注册表。note:经过更多测试后,我编辑了这段代码。

class SomeController extends Zend_Controller_Action
{
    public function init()
    {
        $bootstrap = $this->getInvokeArg("bootstrap");
        if ($bootstrap->hasPluginResource("db")) {
            $dbResource = $bootstrap->getPluginResource("db");
            $db = $dbResource->getDbAdapter();
        }
    }
}

或者,您可以在 Bootstrap 类中编写自定义 init 方法,以将对象保存在默认的 Zend_Registry 中:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
  protected function _initDb()
  {
    if ($this->hasPluginResource("db")) {
      $dbResource = $this->getPluginResource("db");
      $db = $dbResource->getDbAdapter();
      Zend_Registry::set("db", $db);
    }
  }
}

现在,您可以一步而不是三步访问您的数据库对象:

class SomeController extends Zend_Controller_Action
{
    public function init()
    {
        $db = Zend_Registry::get("db");
    }
}

就我个人而言,我会使用第二种技术,因为这样我只需在引导程序中访问资源注册表一次。在第一个示例中,我必须将相同的代码块复制到我的所有控制器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为 Zend 应用程序提供数据库处理程序的“正确”方法是什么 的相关文章

  • PHP 中的文本版本控制,具有差异突出显示

    如果您曾经在 StackOverflow 上编辑过问题 您可能已经注意到它会跟踪问题所应用的确切更改 它以一种形式显示 突出显示文本中已删除的红色部分和自特定编辑以来添加的绿色部分 我的问题是如何自己实现这样一个系统 我正在尝试使用 PHP
  • 如何在 Ubuntu 16.04 上设置 Docker + PhpStorm + xdebug

    我的问题是当我开始监听端口时 xdebug 不起作用 我认为 PhpStorm 无法与 xdebug 链接 我刚刚得到调试器面板变量不可用 看来 xdebug 没有正确设置 使用的软件及版本 Ubuntu 16 04 LTS Docker
  • 有效存储和查询 GPS 坐标

    我想创建一个大型 GPS 坐标数据库 可以通过 返回 此坐标 n 米范围内的所有坐标 来查询该数据库 我需要它尽可能高效 因此循环遍历数据库中的所有坐标并计算坐标是否在 n 米内并不是理想的解决方案 有更简单的解决方案吗 Thanks 我通
  • DB_DEBUG 设置为 FALSE 的数据库连接设置

    我正在尝试连接到我的数据库 但收到以下消息 无法使用提供的设置连接到数据库服务器 文件名 core Loader php 线路号码 346 所以在阅读了很多之后 我发现在数据库连接中将 db default db debug 设置为 FAL
  • PHP 数组按月和总和分组

    我有一个 php 数组 如第一张图片所示 我想要的只是按月获取值的总和 如下所示 我知道这对我们大多数人来说可能很容易 但说实话 我找不到可行的方法来实现它 我尝试在谷歌上搜索 但我找到的所有结果都是关于对数据库查询结果进行分组和求和 而对
  • CakePHP 控制器的实际测试?

    我正在使用 SimpleTest 1 0 1 用 CakePHP 刚刚发布的 1 2 4 编写一个新应用程序 我已经阅读了相关章节Cookbook http book cakephp org view 366 Testing control
  • 使用 XAMPP 在 Windows 10 中安装 go-pear.phar 时出错

    我在尝试安装时总是遇到错误go pear phar 这是点击后的错误Enter对这个问题1 13 all or Enter to continue 1 13 all or Enter to continue ERROR Please ent
  • AWS SNS 参数电话号码无效

    我正在尝试学习 aws sns 服务从我的网络应用程序发送短信 我正在本地主机上工作 params array credentials gt array key gt iam key secret gt iam secret region
  • 如何获取发送的 PHP 卷曲请求的信息

    我正在尝试调试对 Web 服务 getToken 端点的curl 请求 我不能 100 确信 URL 和身份验证信息已正确写入curl 句柄 我正在尝试使用curl getinfo ch CURLINFO HEADER OUT 捕获发送的请
  • PHP 中的 MD5 替代方案? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 目录中每个文件的循环代码[重复]

    这个问题在这里已经有答案了 我有一个图片目录 我想循环遍历并对其进行一些文件计算 这可能只是睡眠不足 但我如何使用 PHP 来查找给定的目录 并使用某种 for 循环遍历每个文件 Thanks scandir http php net sc
  • Zend Framework 调用另一个控制器操作

    您好 我在这里遇到调用另一个控制器操作来发送邮件的问题 这是我的代码 user php public function followAction follow id this gt getParam id response a href c
  • 原则 2 使用 QueryBuilder 进行条件多行更新

    这个问题有一些答案 但实际上 它们似乎都无法帮助完成一项简单的任务 我需要使用 Doctrine2 QueryBuilder 根据一个查询中的条件更新多行 最明显的方法应该是错误的 userAgeList user name a gt 30
  • PHP 和 MySQLi 中没有选择数据库错误[重复]

    这个问题在这里已经有答案了 我必须从 MySQL 数据库中选择数据 我一直在寻找答案 但仍然没有找到 我正在学习W3School http www w3schools com php php mysql select asp 我的 MySQ
  • htaccess 文件中的动态重写

    我正在我的 htaccess 文件中进行一些重写和重定向 我这样做的原因是因为我正在为现有网站开发新的设计和布局 因此我需要重定向以保持谷歌排名等 所以旧的 现有的 URL 看起来像这样 news internet shopper numb
  • 访问位于服务器根目录之前/之外的文件?

    我正在为一家售后客服企业做一个内网 员工需要能够将 img 文件上传到互联网服务器 我需要将它们存储在 is BEFORE 的目录中www 网站的根目录 使用 php 执行此操作非常简单 但如何在上传这些图像后将它们包含在网站上 我试过这段
  • PHP exec() 返回值是什么?

    我正在尝试使用 PHP exec 函数 如果 return var 参数与输出参数一起存在 那么执行命令的返回状态将被写入此 多变的 如果执行成功 则为 0 但是 如果出现错误 则可能是多个其他整数 我似乎无法在任何地方找到这些整数对应的内
  • CodeIgniter form_validation->run() 总是返回 false?

    我是新来的CodeIgniter我一直在尝试实现表单提交功能 但是每当我按 提交 时 表单页面只会刷新并且数据库不会更新 看来 this gt form validation gt run 总是返回 false 但我不知道为什么 The 控
  • 如何使用存储过程 SQL SERVER 2008 R2(mssql) 插入 PHP 数组值

    我有这个数组 REV Array 0 gt 240 1 gt 241 2 gt 242 3 gt 243 4 gt 249 我现在使用下面的代码进行插入 将每个数组的元素存储在带有 id userID Type 和 Date 的行中 if
  • 如何确定 n 高数字金字塔中的最大路线成本

    我有一个像这样的数字金字塔 7 4 8 1 8 9 2 4 6 7 4 6 7 4 9 4 9 7 3 8 8 routes 32 每个数字都按其系列中的强大程度进行索引 0 9 gt 1 1 8 gt 5 2 8 gt 4 3 7 gt

随机推荐