我正在编写我的第一个PHP应用程序。每个人都在讨论如何bootstrap.php
初始化您的应用。这是有道理的,我把一个我很满意的东西放在一起。有两件事我不明白,似乎没有人提到:
我从哪里打电话给我的boostrap?我是否将其包含在每个页面中?请告诉我有更好的方法......
我如何制作它以便我的引导程序不会比需要更频繁地调用?我认为只需要在应用程序的开头或新会话的开始时调用它。
答案 0 :(得分:13)
1:通常,引导程序位于“application”目录中。它从“public”目录调用,该目录与应用程序处于同一级别(不在其中)。公共文件夹中的index.php应该包含bootstrap.php,这是你应该将Document_Root设置为的位置(注意你可能需要更改/添加一些包含它的路径才能工作)
2:只应通过公用文件夹中的index.php文件包含一次。如果正确完成,只要包含它就足够了。
希望有所帮助。
答案 1 :(得分:8)
这取决于您的应用程序架构。
如果您的架构是一个很好的旧“PHP脚本群” - 直接从浏览器调用的PHP脚本 - 那么您将以某种方式将它包含在每个脚本的顶部。
现在,大多数开发人员(和框架)通过/index.php以这种或那种方式对他们的所有请求进行编组,通常会进行一些URL重写,以便为用户提供漂亮,漂亮的URL。
在这个时代,你可能应该做后者,或者至少考虑一下。它可以带来更好的组织,更重要的是,它允许您将所有代码保留在Web服务器的文档根目录之外,这是一个很好的安全实践,出于多种原因,超出了本答案的范围。
答案 2 :(得分:5)
查看singleton pattern。您可以将引导类加倍作为资源容器,例如:
$bootstrap = Bootstrap::getInstance();
$dbConn = $bootstrap->getPdoDbh();
您可以include
或require
该文件,或使用自动加载器并确保您有一个调用来实例化所有页面上的对象。在类定义之后,您甚至可能会在文件底部调用getInstance()
。
或者您可以使用基于URL的路由,并让您的所有请求都通过单个index.php文件,就像Zend Framework一样。或者更好的是,使用Zend Framework。
这个答案假设你正在做OOP w / PHP> = 5,这真的是要走的路。
答案 3 :(得分:1)
这取决于你的bootstrap文件的功能。如果它只是一个设置一些ini设置的文件,例如创建一个理智的执行环境并建立数据库连接,那么只需在脚本中包含require_once即可。如果它更像是单点输入,那么您可以配置服务器来过滤对它的所有请求,并将其分派到适当的控制器脚本。
答案 4 :(得分:1)
引导PHP应用程序的一种更优雅的方法是使用Composer。
如今,几乎每个PHP库都使用Composer,并且需要一个类似Bootstrap.php
的文件就很简单:
"autoload": {
"psr-4": {
"Acme\\Rocket\\": "src/"
},
"files": ["src/Bootstrap.php"]
},
请注意第二个属性files
。 (第一个psr-4
是标准的PSR-4样板自动加载功能,仅包含在其中,以使示例更加真实。)
以这种方式包含引导文件不会天真地假定PHP应用程序是通过index.php
或类似方式在Web服务器上下文中执行的;该应用程序很可能是命令行应用程序(或两者,例如Laravel / Artisan)。通过自动加载程序进行引导使这种区别成为不可能。