我目前使用Composer和PSR-4在PHP中学习自动加载。我已经成功配置了我的composer.json,并且可以使用名称空间访问类。现在,问题在于我必须将供应商/autoload.php包括在我想使用的每个文件中。看起来这样,因为我在项目中的结构:
require("../../../vendor/autoload.php");
是否有一种更干净的方法可以执行此操作或避免在每个文件中需要它?
我尝试了一些事情,例如使用该路线创建全局变量,但它不起作用。这就是我尝试的:
在我的index.php的开头: $GLOBAL["autoloadPath"]= $_SERVER['DOCUMENT_ROOT'] . '/ipa-crm/vendor/autoload.php';
然后,我将其添加到所需的每个文件中: require_once $GLOBAL["autoloadPath"];
预先感谢。
使用.htaccess
中的配置auto_prepend_file
,您可以自动将PHP文件预先将PHP文件预先到所有请求的PHP文件中。只需将其放入您的.htaccess
中:
php_value auto_prepend_file "/path/to/file/before.php"
php_value auto_append_file "/path/to/file/after.php"
我想说的最建议的方法是拥有一个将加载所有其他文件的单个文件,该文件将根据当前操作加载所有其他文件。
因此,您的index.php
文件具有类似的内容(显然非常简化):
require __DIR__.'/../vendor/autoload.php';
switch ($_GET['url']) {
case 'contact':
require __DIR__.'/../pages/contact.php';
break;
case '':
require __DIR__.'/../pages/main.php';
break;
default:
require __DIR__.'/../pages/404.php';
}
,您还拥有启用了此类内容的mod重写的.htaccess
文件:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*)(.*)/?$ index.php?url=$1&%{QUERY_STRING}
因此,现在所有流量都将通过index.php
,您只能在此文件中需要作曲家自动加载器。
可能的几个不同解决方案。最清洁的方法是仅在配置文件中使用require_once,其中每个项目都有自己的一组供应商文件夹。但是Localhost上有一个高级选项,或者允许重新配置PHP.Ini的服务器:
修改您的php.ini,以附加自定义路径,该路径指向作曲家的全局路径。然后写:
<?php
require_once "vendor/autoload.php";
确保您不使用本地供应商目录,或者只是确保您的作曲家已在本地定义了所有内容。我的意思是,局部 ./供应商目录的存在是可选的。" ./" 在我的示例中缺少的将允许PHP寻找全局路径。然后,始终在全球使用您的作曲家(安装作曲家库时,将 Global 作为附加参数。
您的 php.ini 可能看起来像:
include_path = "C:/Users/USER/AppData/Roaming/Composer"
因此,如果供应商/autload.php始终可用于任何php文件,如果他们称为require_once"供应商/autoLoad.php"。希望您将在配置文件中使用一次用于整个项目,而不是来自单个脚本。