【问题标题】:PHP Bootstrapping BasicsPHP 引导基础
【发布时间】:2011-03-19 20:12:33
【问题描述】:

我正在编写我的第一个 PHP 应用程序。每个人都在谈论使用bootstrap.php 来初始化您的应用程序。这是有道理的,我已经整理了一个我很满意的。有两件事我不明白,而且似乎没有人提及:

  1. 我从哪里调用我的 boostrap?我是否将其包含在每个页面中?请告诉我有更好的方法...

  2. 如何做到这一点,这样我的引导程序就不会被调用得比需要的更频繁?我假设它只需要在应用启动或新会话开始时调用。

【问题讨论】:

    标签: php bootstrapping


    【解决方案1】:

    1:通常引导程序位于“应用程序”目录中。它是从与应用程序处于同一级别的“公共”目录调用的(不在其中)。公共文件夹中的 index.php 应该包含 bootstrap.php ,这就是您的 Document_Root 应该设置的位置(请注意,您可能需要更改/添加一些包含路径才能使其工作)

    2:它只能通过公共文件夹中的 index.php 文件包含一次。如果正确完成,只需包含它就足够了。

    希望对您有所帮助。

    【讨论】:

    • 换句话说:有两个并排的目录:application(用于应用程序的源,无法从网络访问)和public(用于公共区域,从网络可见和在 Apache 中设置为 DocumentRoot)。在public 中有index.php,它是服务器显示的前端,它包括application/bootstrap.php,它只能从PHP 脚本访问,不能从网络访问,它引导应用程序。这是第一个调用的应用程序脚本,但在 public/index.php 的上下文中。
    • ...服务器显示的前端,包含 ../application/bootstrap.php 只能从PHP 脚本...
    【解决方案2】:

    这取决于您的应用程序架构。

    如果您的架构是古老的“php 脚本群”——直接从浏览器调用的 PHP 脚本——那么您将把它包含在每个脚本的顶部,无论哪种方式。

    如今,大多数开发人员(和框架)以一种或另一种方式通过 /index.php 整理他们的所有请求,通常会进行一些 URL 重写以制作漂亮、漂亮的 URL 供用户查看。

    在当今时代,您可能应该做后者,或者至少考虑一下。它带来了更好的组织,更重要的是,允许您将所有代码保留在 Web 服务器的文档根目录之外,这是一种很好的安全实践,原因有几个超出了此答案的范围。

    【讨论】:

      【解决方案3】:

      看看singleton pattern。您可以将引导类加倍作为资源容器,例如:

      $bootstrap = Bootstrap::getInstance();
      $dbConn = $bootstrap->getPdoDbh();
      

      您可以includerequire 文件,或使用自动加载器并确保您有调用实例化所有页面上的对象。您甚至可以在文件底部的类定义之后调用getInstance()

      或者您可以使用基于 URL 的路由并让您的所有请求都通过一个 index.php 文件,就像 Zend Framework 所做的那样。或者更好的是,使用Zend Framework

      此答案假设您正在使用 PHP >=5 进行 OOP,这确实是要走的路。

      【讨论】:

        【解决方案4】:

        这取决于您的引导文件的作用。如果它只是一个设置一些 ini 设置的文件,以创建一个健全的执行环境并建立一个数据库连接,那么只需在脚本中包含 require_once 就足够了。如果它更像是一个单点入口,那么您可以配置您的服务器以过滤对其的所有请求并将其分派到适当的控制器脚本。

        【讨论】:

          【解决方案5】:

          引导 PHP 应用程序的一种更优雅的方法是使用 Composer。

          现在几乎每个 PHP 库都使用 Composer,并且需要类似 Bootstrap.php 的文件很简单:

          "autoload": {
              "psr-4": {
                  "Acme\\Rocket\\": "src/"
              },
              "files": ["src/Bootstrap.php"]
          },
          

          注意第二个属性files。 (第一个 psr-4 是标准 PSR-4 样板自动加载,只是为了让示例更加真实而包含在内。)

          以这种方式包含引导文件不会天真地假设 PHP 应用程序是在 web 服务器上下文中执行的,通过index.php 或类似方式;该应用程序很可能是一个命令行应用程序(或两者兼有,如 Laravel/Artisan)。通过自动加载程序进行引导使这种区别不再是问题。

          【讨论】:

            猜你喜欢
            • 2021-02-02
            • 2011-04-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-12-01
            • 2017-05-24
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多