我目前正在学习使用composer和psr-4在php中自动加载。我已成功配置我的composer.json,我可以使用命名空间访问类。现在,问题是我必须在我想要使用它的每个文件中包含vendor / autoload.php。它看起来像是因为我在项目中的结构:
require("../../../vendor/autoload.php");
是否有更简洁的方法来执行此操作或避免在每个文件中都要求它?
我尝试过使用该路由创建一个Global变量,但它无效。这就是我的尝试:
在index.php的开头:
$GLOBAL["autoloadPath"]= $_SERVER['DOCUMENT_ROOT'] . '/ipa-crm/vendor/autoload.php';
然后我在我需要的每个文件中添加了这个:
require_once $GLOBAL["autoloadPath"];
提前致谢。
答案 0 :(得分:0)
使用auto_prepend_file
中的配置.htaccess
,您可以自动将PHP文件添加到所有请求的PHP文件中。只需将它放入.htaccess
,就像这样:
php_value auto_prepend_file "/path/to/file/before.php"
php_value auto_append_file "/path/to/file/after.php"
答案 1 :(得分:0)
我想说最推荐的方法是让一个文件加载所有其他文件,这些文件会根据当前操作加载所有其他文件。
所以你有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';
}
你还有.htaccess
个文件,其中包含mod重写功能:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*)(.*)/?$ index.php?url=$1&%{QUERY_STRING}
现在所有流量都将通过index.php
,您只能在此单个文件中使用Composer自动加载器。
答案 2 :(得分:0)
可能有多种不同的解决方案。最干净的方法是仅在配置文件中使用require_once,其中每个项目都有自己的供应商文件夹集。但是localhost或允许重新配置php.ini的服务器上有一个高级选项:
修改您的php.ini,以添加指向作曲家的全局路径的自定义路径。然后写:
<?php
require_once "vendor/autload.php";
确保您不使用本地供应商目录,或者仅确保您的作曲家已在本地定义了所有内容。我的意思是,本地 ./ vendor 目录的存在是可选的。我的示例中缺少的“ ./” 将允许PHP查找全局路径。然后,始终全局使用您的作曲家(安装作曲家库时,将 global 作为附加参数使用。
您的 php.ini 可能类似于:
include_path = "C:/Users/USER/AppData/Roaming/Composer"
因此,vendor / autload.php始终可用于任何php文件,如果它们将require_once称为“ vendor / autoload.php”。希望您将在整个项目的配置文件中使用它一次,而不是从单个脚本中使用它。