PHP Bootstrapping基础知识

问题描述 投票:19回答:5

我正在编写我的第一个PHP应用程序。每个人都在谈论有一个bootstrap.php来初始化你的应用程序。这是有道理的,我把一个我很满意的东西放在一起。有两件事我不明白,似乎没有人提到:

  1. 我在哪里打电话给我的自助表格?我是否将其包含在每个页面中?请告诉我有更好的方法......
  2. 我怎么做到这样我的引导程序不是经常被调用的?我认为它只需要在应用程序的开头或新会话的开始时调用。
php bootstrapping
5个回答
13
投票

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

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

希望有所帮助。


8
投票

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

如果您的架构是一个很好的旧“PHP脚本群” - 直接从浏览器调用的PHP脚本 - 那么您将以某种方式将它包含在每个脚本的顶部。

现在,大多数开发人员(和框架)通过/index.php以这种或那种方式对所有请求进行编组,通常会进行一些URL重写,以便为用户提供漂亮,漂亮的URL。

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


5
投票

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

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

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

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

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


1
投票

这取决于你的bootstrap文件做什么。如果它只是一个设置一些ini设置的文件,例如创建一个理智的执行环境并建立数据库连接,那么只需在脚本中包含require_once即可。如果它更像是单点输入,那么您可以配置服务器以过滤对它的所有请求,并将其分派到适当的控制器脚本。


1
投票

引导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)。通过自动加载器进行引导使得这种区分不成问题。

© www.soinside.com 2019 - 2024. All rights reserved.